我在EFCore项目的EF代码第一个对象上有一些JSONB列。我想为存储在JSONB属性/列中的那些强类型对象内的属性设置一些GIN索引。
这可能吗? (当前使用的是postgres:最新图片)
谢谢。
答案 0 :(得分:2)
由于.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" });
答案 1 :(得分:1)
没有通过Npgsql EF6提供程序设置GIN索引的特定方法。但是,您可以在迁移中使用原始SQL来手动设置它。
但是,正如@ hellokitty5685在另一个答案中所写,这在EF Core中是可能的。
答案 2 :(得分:1)
嗯,实际上你可以这样做
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Artist>()
.HasIndex(a => new { a.Album })
.ForNpgsqlHasMethod("gin");
base.OnModelCreating(modelBuilder);
}
当您运行ef add migration时,生成的sql查询将类似于:
使用gin(“专辑”)在艺术家上创建索引ix_artist_album;
Npgsql中的文档:http://www.npgsql.org/efcore/modeling/indexes.html