Postgresql 是否可以使用NPGSQL在CodeFirst EntityFramework中指定JSONB GIN索引?
我在EFCore项目中的EF代码优先对象上有一些JSONB列。我想为强类型对象中的属性设置一些GIN索引,这些强类型对象存储为JSONB属性/列。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
这可能吗?(当前正在使用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;