Quando si esegue una query su EF tramite espressioni linq o lambda, sono necessarie solo istruzioni di join se lo schema sottostante non fornisce FK e quindi non si dispone di proprietà di navigazione sugli oggetti.
Dall'altro lato, l'inclusione (caricamento ansioso) e il caricamento lento possono funzionare solo se sono presenti FK, perché utilizzano le proprietà di navigazione.
Lo sql sottostante in entrambi i casi utilizzerà i join (poiché sql non ha il concetto di "proprietà di navigazione").
Per quanto riguarda le prestazioni, dipende dalle situazioni. Il caricamento lento rispetto al caricamento Eager (quindi nello scenario FK) può essere una scelta difficile.
Di solito vado con caricamento lento, utile quando si dispone di un grande risultato principale, ma è necessario "unire" solo i dati di alcuni elementi dell'intero set di risultati.
Se si sa che avrete bisogno dei dati di join dell'intero set di risultati, il carico impaziente potrebbe essere migliore per le prestazioni. Suggerirei di sperimentare e vedere di persona.
fonte
2011-12-16 11:23:50
Grazie per la risposta, ma ancora bisogno di qualcosa di più preciso. –
Cosa succede se si dispone di proprietà di navigazione aggiunte manualmente senza chiavi esterne sottostanti. Includerà il lavoro come previsto o no? – Dan