Платформа сущностей возвращает нуль для строки, если первый столбец в этой строке равен нулю
Я вижу странное поведение в моей модели Entity Framework. Я получил запрос, который выглядит следующим образом:
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, возвращает все столбцы в объединенном результирующем наборе в алфавитном порядке, а первый в алфавитном порядке обнуляется и для некоторых строк является нулевым.
Рассматриваемый столбец не является первичным ключом; если бы это был первичный ключ, он не мог бы быть нулевым.
Когда Entity Framework обрабатывает строки возвращенных данных в объекты, он смотрит на значение первого столбца в каждой строке. Если этот столбец имеет значение NULL, он возвращает значение NULL для строки вместо объекта со свойством, которое соответствует этому столбцу со значением NULL.
Я не верю, что это как-то связано с левым внешним соединением; бывает так, что мой запрос использует один. Однако я не проводил никаких проверок, чтобы проверить это, так что это всего лишь предположение.
Кто-нибудь видел это раньше? У кого-нибудь есть решение для этого?
Тони