NPGSQL,.Net Core中的覆盖索引

时间:2019-01-25 16:45:05

标签: npgsql

我正在尝试使用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不包含“实体”的定义并且没有“实体”接受参数“设备”(设备存在),因此它不起作用。

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

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

它应该是 2.2.0 版本,因为2.2.0中引入了this feature

<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)