JSONB GIN 索引是否可以在 CodeFirst EntityFramework with NPGSQL 中指定



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

谢谢。

由于.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" });

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

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

运行 EF 添加迁移时,生成的 SQL 查询将如下所示:

使用杜松子酒("专辑"(在艺术家上创建索引ix_artist_album;

Npgsql 中的文档:http://www.npgsql.org/efcore/modeling/indexes.html

步骤 1:创建索引

modelBuilder.Entity<MyAwesomeModel>()
    .HasIndex(f => f.stringToTriGram)
    .HasMethod("gin")
    .HasOperators("gin_trgm_ops");

第 2 步:启用三元组扩展

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.HasPostgresExtension("pg_trgm");
}

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

但是,正如@hellokitty5685在另一个答案中所写的那样,这在 EF Core 中是可能的。

最新更新