EF Core 5 将 jsonb 字段空检查转换为假常量
EF Core 5 translate jsonb field null check to false constant
我的 jsonb 字段配置了流畅的界面。
class MyType
{
public MyJsonField JsonField { get; set; }
}
class MyJsonField
{
public int[]? Array { get; set; }
}
我尝试检查该数组是否为空或包含一些值:
query = query.Where(myTypes => myTypes.JsonField.Array == null || EF.Functions.JsonContains(myTypes.JsonField.Array, "5"));
EF 将查询转换为 sql,不进行空值检查
SELECT ... FROM myTypes AS m WHERE m.JsonField->'Array' @> 5
如果我尝试仅使用空检查创建查询
query = query.Where(myTypes => myTypes.JsonField.Array == null)
EF 将其翻译成
SELECT ... FROM myTypes AS m WHERE FALSE
为什么会这样?
我可以用 EF 检查数组是否为 null 吗?
这由问题 https://github.com/npgsql/efcore.pg/issues/1674 跟踪。它已经得到修复,将与 EF Core PostgreSQL 提供程序的 5.0.7 版一起发布(应该会在接下来的几天内发布)。
我的 jsonb 字段配置了流畅的界面。
class MyType
{
public MyJsonField JsonField { get; set; }
}
class MyJsonField
{
public int[]? Array { get; set; }
}
我尝试检查该数组是否为空或包含一些值:
query = query.Where(myTypes => myTypes.JsonField.Array == null || EF.Functions.JsonContains(myTypes.JsonField.Array, "5"));
EF 将查询转换为 sql,不进行空值检查
SELECT ... FROM myTypes AS m WHERE m.JsonField->'Array' @> 5
如果我尝试仅使用空检查创建查询
query = query.Where(myTypes => myTypes.JsonField.Array == null)
EF 将其翻译成
SELECT ... FROM myTypes AS m WHERE FALSE
为什么会这样? 我可以用 EF 检查数组是否为 null 吗?
这由问题 https://github.com/npgsql/efcore.pg/issues/1674 跟踪。它已经得到修复,将与 EF Core PostgreSQL 提供程序的 5.0.7 版一起发布(应该会在接下来的几天内发布)。