Sto riscontrando un problema con le tabelle di join molti-a-molti in C # Core EF. Sto convertendo il codice .NET Framework in .NET Core 2.1 ed è un po 'più complicato in quanto tali tabelle di join devono essere definite manualmente in dbcontext con una classe di modello di accompagnamento anziché essere gestite in background come prima.
Non riesco a capire come eseguire l'interrogazione. Caricamento desideroso.
Ad esempio, includevo semplicemente i dati correlati usando
db.Student.Include(x => x.Course).Where(...
Ora questo non funziona più in quanto posso solo caricare i dati della tabella di join
db.Student.Include(x => x.CourseStudent).Where(...
Se lo faccio
db.Student.Include(x => x.CourseStudent).ThenInclude(y => y.Course).Where(...
quindi ottengo l'errore:
The Include property lambda expression 'x => {from CourseStudent y in x.Course select [y].Course}' is invalid. The expression should represent a property access: 't => t.MyProperty'. To target navigations declared on derived types, specify an explicitly typed lambda parameter of the target type, E.g. '(Derived d) => d.MyProperty'. For more information on including related data, see http://go.microsoft.com/fwlink/?LinkID=746393.
Ho letto quella pagina e non posso trovare nulla di utile lì. Dice .ThenInclude () dovrebbe funzionare ma non funziona.
Lo studente è derivato dalla persona ma tutti i membri che contano sono nello studente. Il corso è solo corso.
Qualcosa non va e non so cosa ...
Durante la progettazione di un piccolo progetto di esempio mi sono imbattuto nella soluzione. È stato il bug di IntelliSense che mi ha ingannato, anche se ne avevo letto ... Quindi il problema è stato risolto.
https://docs.microsoft.com/en-us/ef/core/querying/related-data#including-multiple-levels