Entity Framework возвращает null для строки, если первый столбец в этой строке равен null

Я наблюдаю странное поведение в моей модели 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, возвращает все столбцы в объединенном наборе результатов в алфавитном порядке, а первый столбец в алфавитном порядке допускает значение NULL и является нулевым для некоторых строк.

рассматриваемый столбец не является первичным ключом; если бы это был первичный ключ, он не мог бы быть нулевым.

Когда Entity Framework обрабатывает строки возвращенных данных в объекты, это слишком king по значению первого столбца в каждой строке. Если этот столбец имеет значение null, он возвращает значение null для строки вместо объекта со свойством, которое соответствует этому столбцу, установленному на значение null.

Я не думаю, что это как-то связано с левым внешним соединением; просто так получилось, что мой запрос использует один. Однако я не проводил никаких тестов, чтобы проверить это, так что это просто предположение.

Кто-нибудь видел это раньше? У кого-нибудь есть исправление для этого?

Tony

6
задан Tony Vitabile 17 May 2012 в 21:10
поделиться