La classe ObjectQuery espone il metodo Include per caricare in Eager Loading una o più entity collegate. Visto che un repository esiste per mascherare il lavoro interno, dovevamo trovare un modo di esporre questo metodo senza esporre la classe ObjectQuery. Il lavoro è banale in quanto abbiamo aggiunto un metodo Include alle interfacce e poi nell'implementazione di questo metodo abbiamo chiamato l'Include di EF e restituito l'istanza del repository così da poter fare chaining i metodi.
La banalità di questo metodo nasconde una piccola insidia che bisogna tener a mente. Il metodo Include salva internamente la stringa di include ma poi non ritorna this, bensì cea una nuova istanza di ObjectQuery passandogli lo stato interno (quindi la stringa di include e altro ancora). Questo significa che se scriviamo qualcosa del tipo
oq.Include("stringa");
Il risultato è che abbiamo perso la nuova istanza di ObjectQuery e quindi al momento della query non avremo le stringhe di Include che vorremmo. La soluzione è comunque altrettanto banale.
oq = oq.Include("stringa");
Stay Tuned...
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- La mia presenza al dotnetcampus, il 12 aprile 2013 alle 09:23
- Cosa c'è di nuovo in ASP.NET 4.5 e MVC 4?, il 28 settembre 2012 alle 10:58
- Le mie sessioni su Entity Framework alla TechDays-WPC, il 10 novembre 2010 alle 09:07
- Entity Framework 4.0 alla Real Code Conference il 25 maggio a Firenze, il 7 maggio 2010 alle 11:16
- jQuery e Microsoft Ajax Library al DotNetCampus, il 9 febbraio 2010 alle 08:27