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 版一起发布(应该会在接下来的几天内发布)。