Una delle cose sulle quali sono rimasto piacevolmente sorpreso dall' Entity Framework è il totale controllo che si ha sul caricamento delle tabelle referenziate.
In L2S tutto ciò avviene in modo assolutamente trasparente e non sempre nel migliore dei modi possibili, ad esempio in una relazione molti a molti vengono comunque carcati anche i record nella tabella di relazione intermedia. In EF è possibile invece comandare il caricamento attraverso il metodo Include.
Supponiamo di avere due tabelle Documenti e Classi in realzione molti a molti con una tabella DcocumentiClassi
Dall'oggetto documento avremmo a disposizione la tabella direttamente referenziata DcocumentiClassi che potremmo caricare con
documento.DcocumentiClassi.Load();
però questo non caricherà i record nella tabella Classi, mentre:
var qry = documento.DcocumentiClassi.CreateSourceQuery();
var docsClassi = qry.Include("Classi");
var classi = docsClassi.Select(d => d.Classe).ToList();
farà eseguire esattamente la query che ci serve:
exec sp_executesql N'SELECT
[Extent2].[IdClasse] AS [IdClasse],
... tralascio gli altri campi...
FROM [DcocumentiClassi] AS [Extent1]
LEFT OUTER JOIN [Classi ] AS [Extent2] ON [Extent1].[IdClasse] = [Extent2].[IdClasse]
WHERE [Extent1].[IdDocumento] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=1
alla prossima :-D