Struktura encji zwraca wartość null dla wiersza, jeśli pierwsza kolumna w tym wierszu jest pusta

Widzę dziwne zachowanie w modelu Entity Framework. Mam zapytanie, które wygląda tak:

<code>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();
</code>

Zapytanie zwraca wszystkie kolumny w kolejności alfabetycznej według nazwy kolumny. Okazuje się, że ta kolumna ma wartość NULL dla kilku wierszy w zestawie wyników. Kiedy rozwijam zmienną wierszy w debuggerze, widzę, że cały wiersz ma wartość NULL!

EDYCJA: Pewne wyjaśnienie.

Przez „pierwszą kolumnę” mam na myśli pierwszą kolumnę pierwszego wiersza, tj. „SELECT A, B, C OD ...”, mam na myśli A. Po prostu zdarza się, że zapytanie, które kompiluje Entity Framework, zwraca wszystkie kolumny w połączonym zestawie wyników w porządku alfabetycznym, a pierwszy alfabetycznie jest pusty i dla niektórych wierszy jest pusty.

Ta kolumna nie jest kluczem podstawowym; jeśli byłby kluczem podstawowym, nie mógł być pusty.

Gdy Entity Framework przetwarza wiersze zwróconych danych na obiekty, sprawdza wartość pierwszej kolumny w każdym wierszu. Jeśli ta kolumna ma wartość NULL, zwraca wartość NULL dla wiersza, zamiast obiektu z właściwością odpowiadającą tej kolumnie ustawionej na wartość NULL.

Nie wierzę, że ma to coś wspólnego z lewym złączeniem zewnętrznym; tak się składa, że ​​moje zapytanie korzysta z jednego. Nie zrobiłem jednak żadnych testów, aby to zweryfikować, więc to tylko przypuszczenie.

Czy ktoś to kiedyś widział? Czy ktoś ma na to jakieś rozwiązanie?

Tony

questionAnswers(2)

yourAnswerToTheQuestion