Carregamento explícito de dados relacionados
Carregamento explícito
Você pode carregar explicitamente uma propriedade de navegação pela API DbContext.Entry(...)
.
using (var context = new BloggingContext())
{
var blog = await context.Blogs
.SingleAsync(b => b.BlogId == 1);
await context.Entry(blog)
.Collection(b => b.Posts)
.LoadAsync();
await context.Entry(blog)
.Reference(b => b.Owner)
.LoadAsync();
}
Você também pode carregar explicitamente uma propriedade de navegação executando uma consulta separada que retorna as entidades relacionadas. Se o controle de alterações estiver habilitado, quando uma consulta gerar uma entidade, o EF Core automaticamente definirá as propriedades de navegação da entidade recém-carregada para se referirem a alguma entidade já carregada e definir as propriedades de navegação das entidades já carregadas para se referirem à entidade recém-carregada.
Como consultar entidades relacionadas
Você também pode obter uma consulta LINQ que representa o conteúdo de uma propriedade de navegação.
Isso permite que você aplique outros operadores na consulta. Por exemplo, aplicativo um operador de agregação sobre as entidades relacionadas sem carregá-las na memória.
using (var context = new BloggingContext())
{
var blog = await context.Blogs
.SingleAsync(b => b.BlogId == 1);
var postCount = await context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.CountAsync();
}
Você também pode filtrar quais entidades relacionadas são carregadas na memória.
using (var context = new BloggingContext())
{
var blog = await context.Blogs
.SingleAsync(b => b.BlogId == 1);
var goodPosts = await context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Where(p => p.Rating > 3)
.ToListAsync();
}