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