È possibile caricare ansiosi:
var q = from p in Context.Products
.Include("ModifiedByUser")
.Include("Category")
select p;
... o progetto:
var q = from p in Context.Products
select new
{
Id = p.Id,
Name = p.Name
ModifiedByUserName = p.ModifiedByUser.Name,
CategoryName = p.Category.Name
}
Il vantaggio di proiezione è si ottiene solo i dati necessari, non tutta di ogni entità di riferimento. Il vantaggio del caricamento ansioso è che le entità restituite cambiano il tracciamento. Scegli la tecnica giusta per il problema in questione.
Aggiornamento
Sì, è importante ricordare che si sta utilizzando RIA Services. Presumo che tu stia lavorando anche all'interno del client. Questo rende le cose completamente diverse.
In Servizi RIA, è molto importante assicurarsi di restituire l'intero grafico delle entità necessarie nel carico iniziale. Non vuoi chiamare nulla come .Load() su un'entità, perché sarebbe un altro caldo per il server, il che è negativo per le prestazioni. Se, ad esempio, ci si trova in un client Silverlight e si richiede un elenco di istanze dal server e le relative proprietà non sono già materializzate, è già troppo tardi. Inoltre, l'inclusione non funzionerà in un client Silverlight. Pertanto, i Servizi RIA dispongono di strumenti sul lato server che è possibile utilizzare per garantire che si restituisca inizialmente il grafico corretto e completamente materializzato dell'oggetto.
Quello che è necessario invece è utilizzato IncludeAttribute all'interno del server dei servizi di RIA. Puoi creare una classe di metadati "amici" per decorare il tuo modello di entità con [Includi]. Ci sono esempi in the RIA Services overview document, section 4.8.
fonte
2009-09-03 17:50:20
Ecco un esempio di come sto caricando i dati: Forse avrei dovuto dire che sto codificando questo per un'applicazione Silverlight. E questo è attraverso un servizio di dominio. RTIPricingContext _context = new RTIPricingContext(); LoadOperation op = _context.Load (context.GetPurchaseOrderQuery(), PurchaseOrdersLoadedCallback, null); PurchaseOrdersLoadedCallback private void (LoadOperation lo) { IEnumerable po = lo.Entities.Where (w => w.UserID == SelectedUser.ID); // Questa è la raccolta su cui ho bisogno di compilare le sottoclassi. –
Jukeman