Modifica: Aggiornato descrizione del problema sulla base di test - 12 settembre 2011.EF4.1 entità nidificata multipla Include ottiene NotSupportedException?
Ho questa domanda che getta una NotSupportedException ogni volta che io chiamo ToList() ("il metodo specificato non è supportato.").
IQueryable<FileDefinition> query = db
.FileDefinitions
.Include(x => x.DefinitionChangeLogs)
.Include(x => x.FieldDefinitions.Select(y => y.DefinitionChangeLogs)) // bad
.Include(x => x.FieldDefinitions.Select(y => y.FieldValidationTables)) // bad
.Where(x => x.IsActive);
List<FileDefinition> retval = query.ToList();
Se commento una riga che ho commentato come "cattiva", la query funziona. Ho anche provato a includere diverse entità nidificate nel mio modello a oggetti con lo stesso effetto. Includere qualsiasi 2 causerà un arresto anomalo. Per nested, intendo una proprietà di navigazione di una proprietà di navigazione. Ho anche provato a utilizzare i metodi .Include con un percorso stringa: stesso risultato.
mia struttura della tabella simile a questa:
Questo sta utilizzando MySQL 5.1 (tabelle InnoDB ovviamente) come l'archivio di database con MySQL Connector/NET 6.3.4.
Quindi la mia domanda è: perché questo non funziona?
Nota: riesco a farlo funzionare se carico esplicitamente le entità correlate come in this link. Ma voglio sapere perché EF odia il mio modello di dati.
RISPOSTA: MySQL Connector non è in grado di gestire la seconda entità inclusa nidificata. Getta NotSupportedException, non .NET EF. Questo stesso errore era presente anche quando ho provato questo usando EF4.0, ma la mia ricerca in quel momento mi portò a credere che fossero le entità auto-localizzanti a causare il problema. Ho provato ad aggiornare all'ultimo Connector, ma ha iniziato a causare uno Out of Sync error. Questo è yet another reason per me odiare MySQL.
Cosa succede se * only * lascia il 'Include' lì che hai segnato come" cattivo "e rimuovi gli altri due Include? Funziona allora? – Slauma
@Slauma Sì, la seconda linea funziona da sola. Ho fatto più test e sembra che sia la combinazione di 2a e 3a include che causa l'arresto. Lavorano da soli, ma non insieme. La raccolta FieldValidationTables è caricata da una vista nel database e ho dovuto impostare manualmente la relazione nel modello EF. Ha i campi FieldDefinitionId e TableName. FieldDefintion 1 <-> * FieldValidationTable –
Non ho idea di quale sia questo problema. Probabilmente è necessario aggiungere ulteriori dettagli alla domanda per ottenere una risposta (in pratica per rendere il problema riproducibile per altre persone in un semplice modello di esempio). – Slauma