#58 - Ottimizzare le performance del Lazy Loading con LINQ To SQL tramite il metodo AssociateWith

Quando si parla di relazioni One-To-Many, ad esempio Cliente-Ordini, spesso si ha l'esigenza di caricare gli ordini in Lazy, ovvero solo quando vengono utilizzati nel codice. Questo è il comportamento di default con LINQ To SQL ma non sempre è ideale in quanto spesso capita di non aver bisogno di tutti gli ordini del cliente ma solo di una parte di essi.

Tramite il metodo AssociateWith del DataContext, si può pilotare il Lazy Loading decidendo quali record caricare. Il metodo è generico ed accetta in input una lambda che rappresenta il filtro da applicare alla query effettuata per caricare i dati in Lazy.

In questo esempio, vengono caricati solo gli ultimi 10 ordini di ogni cliente italiano ordinati per data.

using (NWDataContext context = new NWDataContext())
  {
    DataLoadOptions options = new DataLoadOptions();
    options.AssociateWith<Customer>(c => c.Orders.OrderBy(p => p.OrderDate).Take(10));
    var q = from c in context.Customers
              where c.Country == "Italy"
              select c;
    foreach (var customer in q)
    {
      Console.WriteLine(customer.Orders.Count);
    }
    Console.ReadLine();
}


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





IN EVIDENZA
MISC