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 = context.Blogs
.Single(b => b.BlogId == 1);
context.Entry(blog)
.Collection(b => b.Posts)
.Load();
context.Entry(blog)
.Reference(b => b.Owner)
.Load();
}
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 = context.Blogs
.Single(b => b.BlogId == 1);
var postCount = context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Count();
}
Você também pode filtrar quais entidades relacionadas são carregadas na memória.
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();
}