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 开始工作。
我有一个 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 开始工作。