Vedo un comportamento strano nel mio modello Entity Framework. Ho una query che assomiglia a questo:Il framework Entity restituisce null per una riga se la prima colonna in quella riga è null
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();
La query restituisce tutte le colonne in ordine alfabetico per nome della colonna. Si scopre che questa colonna è NULL per poche righe nel set di risultati. Quando espongo la variabile rows nel debugger, vedo che l'intera riga è nullo!
MODIFICA: alcuni chiarimenti.
Per "prima colonna", intendo la prima colonna della prima riga, cioè, in "SELEZIONA A, B, C DA ...", intendo A. Accade semplicemente che la query che Entity Framework costruisce restituisce tutte le colonne nel set di risultati uniti in ordine alfabetico e il primo in ordine alfabetico è annullabile ed è nullo per alcune righe.
La colonna in questione non è una chiave primaria; se fosse una chiave primaria, non potrebbe essere nulla.
Quando Entity Framework elabora le righe dei dati restituiti in oggetti, sta esaminando il valore della prima colonna in ogni riga. Se quella colonna è nullo, restituisce null per la riga, invece di un oggetto con la proprietà corrispondente a quella colonna impostata su null.
Non credo che questo abbia qualcosa da fare in particolare con un join esterno sinistro; succede solo che la mia query ne usa uno. Tuttavia, non ho effettuato alcun test per verificarlo, quindi è solo una supposizione.
Qualcuno l'ha visto prima? Qualcuno ha una soluzione per questo?
Tony
Hai bisogno di un join di sinistra? –
In quale luogo si ottiene l'errore? –
Potresti postare la query SQL che l'EF invia al DB? –