Lazy Loading con l'Entity Framework

di Andrea Zani, in .NET,

Anche se qualcuno afferma il contrario, non cito la fonte, abbiamo a disposizione più metodi per caricare entità collegate. In tutti questi post dedicati all'Entity Framework ho fatto sempre esempio che riguardavano più tabelle (~entità) collegate.

Possiamo fare in modo che sia lo stesso Entity Framework a caricare con una query il tutto grazie a Include:

var coll=from c in EntityContext.Articles.Include("Authors")
select c;
foreach (var item in coll)
{
Response.Write(item.Title);
Response.Write(item.Authors.Name);
}

Oppure possiamo forzare il caricamente delle entità collegate, in questo caso Authors, ad ogni richiesta della stessa:

var coll=from c in EntityContext.Articles
select c;
foreach (var item in coll)
{
Response.Write(item.Title);
if (item.AuthorsReference.IsLoaded) // Controlla se già presente in memoria
    Response.Write(item.AuthorsReference.Value.Name);
else
{
    item.AuthorsReference.Load();
    Response.Write(item.Authors.Name);
}
}

In quest'ultimo caso all'inizio viene eseguita una query che richiede solo la lista degli Articles. Quindi viene verificato che l'entità per gli Authors non sia già presente in memoria; se presente la visualizza direttamente, altrimenti esegue una query al database.

Il numero di query inviate al database è N+(numero di autori richiesti differenti). Ipoteticamente, se tutti gli articoli fossero collegati ad un solo autore, il numero di query inviate al database sarebbero due.

PS: scusate la brevità ma il tempo è tiranno. O Tiràno?

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.

Nella stessa categoria
I più letti del mese