Caricamento esplicito dei dati correlati
Caricamento esplicito
È possibile caricare in modo esplicito una proprietà di navigazione tramite l'API DbContext.Entry(...)
.
using (var context = new BloggingContext())
{
var blog = context.Blogs
.Single(b => b.BlogId == 1);
context.Entry(blog)
.Collection(b => b.Posts)
.Load();
context.Entry(blog)
.Reference(b => b.Owner)
.Load();
}
È anche possibile caricare in modo esplicito una proprietà di navigazione eseguendo una query separata che restituisce le entità correlate. Se il rilevamento delle modifiche è abilitato, quando una query materializza un'entità, EF Core imposta automaticamente le proprietà di navigazione dell'entità appena caricata per fare riferimento a qualsiasi entità già caricata e imposta le proprietà di navigazione delle entità già caricate per fare riferimento all'entità appena caricata.
Esecuzione di query su entità correlate
È anche possibile ottenere una query LINQ che rappresenta il contenuto di una proprietà di navigazione.
In questo modo è possibile applicare altri operatori sulla query. Ad esempio, l'applicazione di un operatore di aggregazione sulle entità correlate senza caricarle in memoria.
using (var context = new BloggingContext())
{
var blog = context.Blogs
.Single(b => b.BlogId == 1);
var postCount = context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Count();
}
È anche possibile filtrare le entità correlate che vengono caricate in memoria.
using (var context = new BloggingContext())
{
var blog = context.Blogs
.Single(b => b.BlogId == 1);
var goodPosts = context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Where(p => p.Rating > 3)
.ToList();
}