我在我的实体框架模型中看到了一个奇怪的行为。我有一个看起来像这样的查询:
var rows = ( from alarm in context.Alarms
join temp in context.ListDetails on alarm.ListDetailId equals temp.ListDetailId into entries from entry in entries.DefaultIfEmpty()
join read in context.Reads on alarm.ReadId equals read.ReadId
join plate in context.Images on alarm.ReadId equals plate.ReadId
where alarm.IActive == 1 && ! alarm.TransmittedAlarm
where read.IActive == 1
where plate.IActive == 1 && plate.ImageTypeId == 2
select new { alarm, entry, read, plate } ).ToArray();
查询按列名按字母顺序返回所有列。事实证明,对于结果集中的几行,该列为 NULL。当我在调试器中展开 rows 变量时,我看到整行都是空的!
编辑:一些澄清。
“第一列”是指第一行的第一列,即在“SELECT A, B, C FROM ...”中,我的意思是 A。碰巧实体框架构建的查询返回了所有连接结果集中的列按字母顺序排列,按字母顺序排列的第一个可以为空,并且对于某些行为空。
有问题的列不是主键;如果它是主键,则不能为空。
当 Entity Framework 将返回数据的行处理成对象时,它会查看每一行中第一列的值。如果该列为空,则返回该行的空值,而不是具有与该列对应的属性设置为空的对象。
我不相信这与左外连接有任何关系。碰巧我的查询使用了一个。但是,我还没有进行任何测试来验证这一点,所以这只是一个假设。
有人见过这个吗?有没有人可以解决这个问题?
托尼