usedatabasenullsemantics

usedatabasenullsemantics

我已确定当执行以下表达式时:

int aNum = 52;
var myArtifacts = mydbcontext.artifacts.Where(a => a.ParentID == aNum ).ToList();

在mysql上执行的查询是:
SELECT
  `Extent1`.`ID`,
  `Extent1`.`ParentID`
FROM `artifacts` AS `Extent1`
WHERE ((`Extent1`.`ParentID` = 52) AND (52 IS NOT NULL));

有人能解释一下为什么添加了最后一个附加条件吗?
和(52不为空)

最佳答案

检查https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcontextconfiguration.usedatabasenullsemantics(v=vs.113).aspx
获取或设置一个值,该值指示在比较两个操作数时是否显示数据库空语义,这两个操作数都可能为空。默认值为false。例如,如果usedatabasenullsemantics为true,则(operand1==operand2)将转换为:(operand1=operand2)和(not(operand1为null或operand2为null)),或者(operand1为null)和(operand2为null)),如果usedatabasenullsemantics为false。
如果当前行为困扰您,请考虑将UseDatabaseNullSemantics设置为true

public class MyContext : DbContext
{
    public MyContext()
    {
        this.Configuration.UseDatabaseNullSemantics = true;
    }
}


myDbContext.Configuration.UseDatabaseNullSemantics = true;

07-27 21:35