为什么 EF6 LINQ 没有为空字符串变量比较生成正确的 "is null" SQL?

Why EF6 LINQ does not generate proper "is null" SQL for null string variable comparison?

我们有一个基于 EDMX 的 EF6 应用程序,我们想在其中 运行 像这样的 LINQ 查询。

string category = ... // comes from somewhere and equals to null
context.Product.Where(e => e.Category == category).ToArray();

我看到的问题是生成的 SQL 在 where 子句中包含一个 [table].[Category] = @p...,而不管变量 category 是否为 null。所以在一天结束时,如果变量是 null,查询 return 没有结果,而不是生成正确的 is null 条件和 return 正确的行。

我已经用显式 e => e.Category == null 表达式进行了测试,它确实按预期生成了 is null

我还检查了 EDMX 和 SQL,相应的 Category 列在这两个地方确实可以为空,所以这可能不是问题所在。

如有任何帮助,我们将不胜感激。

尝试将 context.Configuration.UseDatabaseNullSemantics 设置为 false。这是影响上述行为的 属性。

查看文档here