#71 - Caricare un'associazione in deferred loading con 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...


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.