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:


José Carlos Macoratti