ef 核心生成无效查询

ef core generates invalid query

我有一个 table foo 其中一列是 bar 类型的 jsonb 其中包含 属性 foo_bar jsonb.

我想通过这样的 ef 核心查询获取元素的数量:

await dbContext.Foo.CountAsync(x => x.bar.FooBar.Name == "some name");

Ef 核心生成这样的查询:

SELECT COUNT(*)::INT
FROM foo AS f
WHERE f.bar#>>'{FooBar,Name}' = 'SomeName'

它对我不起作用,因为不是正确的 属性 名称 foo_bar ef 核心生成 FooBar(作为我的 .net 属性)而不是name ef 核心生成 Name

如果有办法让 ef core 生成以下查询:

SELECT COUNT(*)::INT
FROM foo AS f
WHERE f.bar#>>'{foo_bar,name}' = 'Production'

我试图用 [JsonPropertyName("foo_bar")] 属性标记我的 FooBar 属性。

我也尝试使用流畅的方法:

entity.Property<FooBar>("FooBar").HasColumnName("foo_bar").HasColumnType("jsonb");

两者都不行。

我找到了一个解决方法 - 将 .net 属性命名为它们在 db 中命名的名称。 所以在我的例子中,.net 属性 就像:

public FooBar foo_bar { get; set; }

看起来丑陋,但有效

[JsonPropertyName] 的支持有 just been added,并将从版本 5.0.0-preview6 开始工作。