NPGSQL ,.Net Core 中的覆盖索引

Covering Indexes in NPGSQL ,.Net Core

我正在尝试使用 NPGSQL、.NET Core 在我的索引中包含非键列。

我已按照此处找到的示例进行操作 https://www.npgsql.org/efcore/modeling/indexes.html

protected override void OnConfiguring(DbContextOptionsBuilder builder)
=> modelBuilder.Entity<Device>()
               .ForNpgsqlHasIndex(b => b.Id)
               .ForNpgsqlInclude(b => b.Name);

该示例引用了 "modelBuilder" 但请问 modelBuilder 是什么(因为它在当前上下文中不存在)?

我将其更改为引用构建器变量,但它不起作用,因为 DbContextOptionsBuilder 不包含 'Entity' 的定义并且没有 'Entity' 接受参数 'Device'(设备存在) .

然后我将其更改为引用 ModelBuilder 类型变量,它也不起作用(没有覆盖 OnConfiguring(ModelBuilder ...)

有什么建议吗?

谢谢!

您使用哪个版本的 PostgreSQL EF Core 提供程序? 检查 *.csproj 文件中的条目。

应该是2.2.0版本,因为this feature是在2.2.0中引入的。

<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.0" />

不过文档似乎有一些错误。尝试在

中配置索引
  protected override void OnModelCreating(ModelBuilder modelBuilder)

如果我设法自行验证结果,我会通知您。

如果方法仍然不可见并且在 OnModelCreating() 中调用它们无助于尝试 force restoring Nuget packages。 如果您使用 Rider,您可以通过 Tools -> NuGet -> NuGet Force Restore

编辑: 还要检查您的 PostgreSQL 版本是否为 11 (or higher)