Postgresql 是否可以使用NPGSQL在CodeFirst EntityFramework中指定JSONB GIN索引?

Postgresql 是否可以使用NPGSQL在CodeFirst EntityFramework中指定JSONB GIN索引?,postgresql,entity-framework,npgsql,Postgresql,Entity Framework,Npgsql,我在EFCore项目中的EF代码优先对象上有一些JSONB列。我想为强类型对象中的属性设置一些GIN索引,这些强类型对象存储为JSONB属性/列。 这可能吗?(当前正在使用postgres:最新图像) 谢谢。没有通过Npgsql EF6提供程序设置GIN索引的具体方法。但是,您可以在迁移中使用原始SQL手动设置它 然而,@hellokitty5685在另一个答案中写道,这在EF Core中是可能的。好吧,实际上你可以这样做 protected override void OnModelCreat

我在EFCore项目中的EF代码优先对象上有一些JSONB列。我想为强类型对象中的属性设置一些GIN索引,这些强类型对象存储为JSONB属性/列。
这可能吗?(当前正在使用postgres:最新图像)


谢谢。

没有通过Npgsql EF6提供程序设置GIN索引的具体方法。但是,您可以在迁移中使用原始SQL手动设置它


然而,@hellokitty5685在另一个答案中写道,这在EF Core中是可能的。

好吧,实际上你可以这样做

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Artist>()
       .HasIndex(a => new { a.Album })
       .ForNpgsqlHasMethod("gin");

    base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{

modelBuilder.Entity

因为
.ForNpgsqlHasMethod(“gin”)
已经过时,在EF Core 3.1中,您可以使用:

metaBuilder
    .HasIndex(x => x.DocumentNumber)
    .HasMethod("gin")
    .HasOperators("gin_trgm_ops");
您的迁移将如下所示:

migrationBuilder.CreateIndex(
    name: "IX_DocumentContentMeta_DocumentNumber",
    table: "DocumentContentMeta",
    column: "DocumentNumber")
    .Annotation("Npgsql:IndexMethod", "gin")
    .Annotation("Npgsql:IndexOperators", new[] { "gin_trgm_ops" });

谢谢,我对此感到害怕。在这种情况下,我立即考虑创建一个自定义属性,该属性包含它将应用于的属性的GIN索引信息。您知道服务项目中是否有管理手动模式更改的模式吗?我不确定您的确切意思-您将不得不更改自己创建一个迁移并手动编写添加索引的SQL。顺便说一句,请注意EF Core提供程序确实支持指定GIN索引:正在(再次)查看您引用的页面。我想知道自定义运算符是否不能在DB中写入一次,然后使用ForNpgsqlHasOperators覆盖EF中具有正常索引的任意数量的JSONB字段。在本例中,正在使用Create运算符编写GiST索引方法…我将研究可能使用GIN变量执行此操作:。再次感谢。我不认为您是g我想在没有创建索引的情况下创建一个GIN索引…使用GIN
…但我不是一个大的专家。出于某种原因,我认为我在原始文章中看到了实体框架6,而不是实体框架核心…Id您还需要对postgres数据库做些什么才能启用支持?我遇到了一个例外:
'42704:operator cl对于访问方法“gin”
,ass“gin\u trgm\u ops”不存在。这是否需要特定的Postgresql版本才能工作?@nikib3ro是的,请尝试在数据库上执行
创建扩展pg\u trgm;