Caricare un'associazione in deferred loading con Entity Framework

di Stefano Mostarda, in LINQ, Entity Framework,

Nello script #69 abbiamo visto come precaricare un grafo di oggetti eseguendo una sola query sul database. Questa opzione è ideale quando si sa a priori che si deve accedere a tutti i dati del grafo. In alcuni casi, si deve caricare un'entità associata solo in base a determinate condizioni e quindi torna comodo avere un meccanismo per caricare "on demand" i dati necessari.
Entity Framework non permette un caricamento dilazionato in maniera trasparente ma adotta un meccanismo esplicito, ovvero i dati vengono caricati nel momento in cui si chiama il metodo Load della proprietà da caricare. Ad esempio, se si ha una lista di ordini e si devono caricare i dettagli solo di quelli spediti in italia, allora il metodo migliore è scorrere la lista e caricare i dettagli on demand.

using (NWContext ctx = new NWContext()) {
  foreach (var o in ctx.Orders)
  {
    if (o.ShipCountry == "Italia")
    {
      o.Details.Load();
    }
  }
}

Nel caso si debba sapere se un'associazione è gia stata caricata dal database o meno, si può ricorrere alla proprietà IsLoaded.

Questo meccanismo è possibile grazie al fatto che le proprietà che costituiscono un'associazione vengono esposte in maniera indiretta tramite le classi EntityReference e EntityCollection

public EntityCollection<OrderDetails> Details...
public EntityReference<Customer> Customer...

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi