我在 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 中是可能的。