我在EFCore项目中的EF代码第一个对象上有一些JSONB列。我想建立一些GIN索引,以存储为JSONB属性/列的强类型对象中的属性。这可能吗?(当前使用postgres:latest image)
pxiryf3j1#
由于.ForNpgsqlHasMethod("gin")已经过时,在EF Core 3.1中,您可以使用以下命令:
.ForNpgsqlHasMethod("gin")
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" });
型
0yycz8jy2#
其实你可以这样做
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Artist>() .HasIndex(a => new { a.Album }) .ForNpgsqlHasMethod("gin"); base.OnModelCreating(modelBuilder); }
字符串当你运行ef add migration时,生成的sql查询将像这样:CREATE INDEX ix_artist_album ON artist USING gin(“album”);Npgsql中的文档:http://www.npgsql.org/efcore/modeling/indexes.html
zujrkrfu3#
第一步:创建索引
modelBuilder.Entity<MyAwesomeModel>() .HasIndex(f => f.stringToTriGram) .HasMethod("gin") .HasOperators("gin_trgm_ops");
字符串
第二步:开启TrigramExtension
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.HasPostgresExtension("pg_trgm"); }
egdjgwm84#
通过Npgsql EF 6提供程序设置GIN索引没有特定的方法。但是,您可以在迁移中使用原始SQL手动设置它。然而,正如@hellokitty5685在另一个答案中所写的那样,这在EF Core中是可能的。
4条答案
按热度按时间pxiryf3j1#
由于
.ForNpgsqlHasMethod("gin")
已经过时,在EF Core 3.1中,您可以使用以下命令:字符串
您的迁移将如下所示:
型
0yycz8jy2#
其实你可以这样做
字符串
当你运行ef add migration时,生成的sql查询将像这样:
CREATE INDEX ix_artist_album ON artist USING gin(“album”);
Npgsql中的文档:http://www.npgsql.org/efcore/modeling/indexes.html
zujrkrfu3#
第一步:创建索引
字符串
第二步:开启TrigramExtension
型
egdjgwm84#
通过Npgsql EF 6提供程序设置GIN索引没有特定的方法。但是,您可以在迁移中使用原始SQL手动设置它。
然而,正如@hellokitty5685在另一个答案中所写的那样,这在EF Core中是可能的。