Logo UGIdotNET

Impostare a runtime il fetch plan con LINQ to SQL

LINQ to SQL implementa, per default, politiche di lazy (o "deferred") loading: al momento di esecuzione di una query, infatti, viene caricato in memoria solo il primo livello del grafo mentre gli oggetti correlati sono creati al momento dell'effettivo utilizzo. E' possibile disabilitare il deferred loading impostando opportunamente la proprietà DeferredLoadingEnabled del data context:

DataContext db = new DataContext(connectionString);
db.DeferredLoadingEnabled = false;

Questa impostazione si limita però a disabilitare il caricamento on demand, non impostando un fetch plan di tipo Immediate Loading. E' a questo punto possibile specificare quale parte del grafo popolare mediante l'uso del metodo LoadWith della classe DataLoadOptions. Supponendo di voler caricare l'elenco dei clienti del database Northwind, contestualmente agli ordini di ciascun cliente, sarà possibile effettuarlo nel seguente modo:

DataLoadOptions opt = new DataLoadOptions();
opt.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = opt;
var customers = from c in db.GetTable<Customer>() select c;

Autore: Andrea Saltarello
Data: 02 gennaio 2008
Ultimo aggiornamento: 02 gennaio 2008
Categorie:  Data Access

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185