Npsql:使用EF Core在jsonb列上创建索引

问题描述 投票:0回答:1

我在PostgreSQL中有一个标准的NoSQL表:ID(UUID)和Data(jsonb)。我想在进入“数据”列的JSON文档的属性之一上创建索引。通常我像这样使用EF Core:

modelBuilder.Entity<T>().HasIndex(e => e.ColumnToPutAnIndexOn);

我的假设是在JSON属性上创建索引是这样的:

modelBuilder.Entity<T>().HasIndex(e => e.Data.PropertyToPutAnIndexOn);

但是,这给了我一个错误:

The expression should represent a simple property access: 't => t.MyProperty'.

Npgsql documentation仍在处理此事。

没有人知道如何在不编写原始SQL语句的情况下最好地在JSON文档上创建索引吗?

谢谢。

.net postgresql asp.net-core asp.net-core-mvc npgsql
1个回答
0
投票

不幸的是,对jsonb文档中的属性进行索引并不像对表列进行索引一样简单...请看the PostgreSQL docs for this to get an idea

总结重要信息,如果您只想查询顶级JSON属性,则该列上的GIN索引就足够了。如果您想更深入地查询文档,则必须设置一个表达式索引,这完全是另一种野兽。

由于复杂性和不同的选择,提供的内容并不会自动为您做任何事情-您必须在迁移中使用原始SQL来定义所需的索引(这样做没有问题-鼓励这样做) 。如果我们可以为不同的jsonb场景提供合理的索引创建逻辑,则将来可能会改变。

© www.soinside.com 2019 - 2024. All rights reserved.