2012-08-25 12 views
5

Esiste una versione della classe DataLoadOptions esistente in LINQ to SQL per LINQ alle entità? Fondamentalmente voglio avere un posto che memorizza tutta la configurazione di caricamento avido e non devo aggiungere chiamate .Include() a tutte le mie LINQ alle query di entità. O se qualcuno ha una soluzione migliore sicuramente aperta anche a quello.DataLoadOptions equivalenti per LINQ alle entità?

TIA,
Benjy

+0

FYI a chiunque si trovi su Google: http://www.governor.co.uk/news-plus-views/2010/2/16/entityframework-include-multiple-extension-method è stato abbastanza utile – benjy

risposta

5

Personalmente sono contento che non c'è (ufficiale) EF equivalente di DataLoadOptions. Perché? Un paio di motivi:

  • E 'troppo facile per usarli in un modo che eccezioni vengono gettati, vedere la sezione Osservazioni della MSDN page.
  • Non mi piace il concetto di raccolte secondarie filtrate. Quando un dispone di Orders, desidero che il membro Orders rappresenti gli ordini di tale cliente (pigro o meno). Un filtro definito da qualche altra parte (da AssociateWith) è facilmente dimenticato. Li filtrerò quando e dove necessario. Questo porta all'ultima obiezione:
  • Più importante: è stateful e la maggior parte dei bug è causata da uno stato imprevisto. DataLoadOptions cambia lo stato di DataContext in modo che le query successive vengano influenzate. Preferisco definire il caricamento avido dove e quando ne ho bisogno. Digitare è economico, i bug sono costosi.

Tuttavia, per completezza, devo menzionare che Muhammad Mosa ha fatto qualche sforzo in un EF version of DataLoadOptions. Non l'ho mai provato però.

Mi rendo conto che probabilmente si desidera impedire il codice ripetitivo. Ma se hai bisogno di query di forma identica in più di un posto, stai già ripetendo il codice, con o senza include "globale". Una configurazione centrale che carica il carico è pseudo-DRY-ness. E presto ti ritroverai a inciampare sui tuoi stessi piedi quando il carico impaziente non è desiderato ma, dannatamente, è configurato per accadere!

5

Entity Framework non supporta le impostazioni eager loading per tutta la 'ObjectContext'. Ma puoi dichiarare tutte le proprietà 'IQueryable' richieste con le opzioni di inclusione in una classe parziale. Per esempio:

public IQueryable<Order> Orders { 
    get { 
    return OrderSet.Include("OrderDetails"); 
    } 
} 
Problemi correlati