Curso Entity Framework - Explicit Loading - XIV
Nesta aula vamos falar sobre Explicit Loading no Entity Framework.(aula anterior) |
O Explicit
Loading ou carregamento explicito é muito semelhante ao
Lazy Loading no qual
você só recupera os dados quando você explicitamente precisa.
Você pode desejar desativar o lazy loading e ainda ter um controle mais
explícito sobre quando os dados relacionados são carregados.
Além de permitir carregar as entidades explicitamente usando o Include, o Entity Framework permite que você seletivamente e explicitamente recupere os dados relacionados usando o método Load.
Assim , mesmo
com o Lazy Loading desativado, ainda é possível carregar tardiamente as
entidades relacionadas , mas isso deve ser feito com uma chamada explícita.
Para alcançar esse objetivo use o método Load do objeto DBEntityEntry.
Assim quando os objetos são devolvidos por uma consulta, os objetos relacionados não são carregados ao mesmo tempo.
Por padrão, eles não são carregados até que sejam solicitados explicitamente utilizando o método Load em uma propriedade de navegação.
Nota: Para desabilitar o lazy loading no Entity Framework defina a propriedade context.Configuration.LazyLoadingEnabled como false.
Preparando o ambiente
Vamos usar a solução criada na aula 11 - Entity Framework - Consultas Projeção - para mostrar o recurso Lazy Loading.
Abra a solução EF6_EscolaDB criada nesta aula.
Após isso inclua um novo projeto do tipo Console Application com o nome EF6_ExplicitLoad na solução;
Para concluir inclua uma referência ao projeto EF6_LazyLoad para o projeto EF6_EscolaDB e inclua também a string de conexão no arquivo App.Config do projeto template.
A seguir inclua o código abaixo no arquivo Program.cs :
private static void consulta_ExplicitLoading() { using (var ctx = new EscolaDBEntities()) { //desabilita o lazy loading ctx.Configuration.LazyLoadingEnabled = false; //consulta o aluno por nome
var aluno = (from s in ctx.Alunos
where s.AlunoNome == "Macoratti"
select s).FirstOrDefault<Aluno>();
//carrega os cursos para o aluno usando explicit loading
ctx.Entry(aluno).Collection(s => s.Cursos).Load();
}
}
|
Private Shared Sub consulta_ExplicitLoading()
Using ctx = New EscolaDBEntities()
'desabilita o lazy loading
ctx.Configuration.LazyLoadingEnabled = False
'consulta o aluno por nome Dim aluno = (From s In ctx.Alunos Where s.AlunoNome = "Macoratti" select s).FirstOrDefault(Of Aluno)() 'carrega os cursos para o aluno usando explicit loading
ctx.Entry(aluno).Collection(Function(s) s.Cursos).Load()
End Using
End Sub
|
Consulta LINQ | versão VB .NET |
No código acima estamos selecionando um aluno de nome igual a Macoratti e carregando os cursos deste aluno usando a carga explicita via método Load.
Como estamos carregando uma coleção de cursos usando a propriedade de navegação usamos o método Collection para fazer isso ao invés do método Reference:
Usamos : ctx.Entry(aluno).Collection(s => s.Cursos).Load();
Ao invés de : ctx.Entry(aluno).Reference(s => s.Cursos).Load();
O método de extensão Load funciona como ToList, exceto que ele evita a criação da lista completamente.
Na próxima aula vamos tratar do Rastreamento de mudanças (Change Tracking) no Entity Framework.
Vede quão grande amor nos tem concedido
o Pai, que fôssemos chamados filhos de Deus. Por isso o mundo não nos conhece;
porque não o conhece a ele.
1 João 3:1
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: