Supponiamo di avere prima questi modelli:
Method
che ha un OriginalCode
OriginalCode
che ha molti Mutant
's Mutant
che ha molti ParseSubTree
s
Ora quando si esegue una query sul Method
voglio che venga caricato l'altro. Quindi ho il seguente:
Method targetMethod = dBContext.Methods
.Include(me => me.OriginalCode)
.ThenInclude(oc => oc.Mutants)
.FirstOrDefault(me => me.Id == id);
e il prossimo passo è includere anche il ParseSubTree
. Ma il fatto è che non posso accedervi. Vedi la seguente immagine:
il problema è "mu è una lista invece di essere un riferimento a un oggetto"!
Dov'è il mio errore!
TG.
Questo è un problema noto di Intellisense con il sovraccarico di ThenInclude
per le proprietà di navigazione del tipo di raccolta, tracciato dal Completamento dei membri mancanti del parametro lambda nel caso di tolleranza agli errori n. 8237 problema GitHub di Roslyn.
Fino a quando non viene corretto, digita semplicemente il nome della proprietà e verrà compilato correttamente e funzionerà come previsto.
.ThenInclude(mu => mu.ParseSubTrees)
Aggiornamento: ora è anche menzionato in modo specifico nella sezione Inclusione livelli multipli della documentazione di EF Core:
Nota
Le versioni correnti di Visual Studio offrono opzioni di completamento del codice errate e possono causare la
ThenInclude
espressioni corrette con errori di sintassi quando si utilizza il metodoThenInclude
dopo una proprietà di navigazione della raccolta. Questo è un sintomo di un bug IntelliSense tracciato su https://github.com/dotnet/roslyn/issues/8237 . È possibile ignorare questi errori di sintassi spuri purché il codice sia corretto e possa essere compilato correttamente.