Curso Entity Framework - Eager Loading - XII


  Nesta aula vamos falar sobre Eager Loading no Entity Framework. (aula anterior)

Nesta aula iremos abordar o Eager Loading.

Eager Load é o mecanismo pelo qual uma associação, coleção ou atributo é carregado imediatamente quando o objeto principal é carregado.

Dessa forma todas as relações de uma entidade serão carregadas no mesmo momento em que esta entidade é carregada. É o contrário do Lazy Loading.

Lazy Loading - é o mecanismo utilizado pelos frameworks de persistência para carregar informações sob demanda. Esse mecanismo torna as entidades mais leves, pois suas associações são carregadas apenas no momento em que o método que disponibiliza o dado associativo é chamado.

Assim quando objetos são retornados por uma consulta, os objetos relacionados não são carregados ao mesmo tempo, ao invés, eles são carregados automaticamente quando a propriedade de navegação for acessada. 

Preparando o ambiente

Vamos usar a solução criada na aula anterior - Entity Framework - Consultas Projeção -  para mostrar o recurso Eager Loading.

Abra a solução EF6_EscolaDB criada na aula anterior.

Após isso inclua um novo projeto do tipo Console Application com o nome EF6_EagerLoad na solução;

No Menu FILE clique em Add -> New Project e selecione o template Visual C# -> Console Application informando o nome EF6_EagerLoad:

Para concluir inclua uma referência no projeto EF6_EagerLoad para o projeto EF6_EscolaDB, inclua também a string de conexão do projeto EF6_EscolaDB no arquivo App.Config do projeto atual.

A seguir inclua o código abaixo no arquivo Program.cs:

  private static void consulta_Eager_Loading1()
   {
            using (var ctx = new EscolaDBEntities())
            {
                var aluno = (from a in ctx.Alunos.Include("Padrao")
                                where a.AlunoNome == "Janice"
                                select a).FirstOrDefault<Aluno>();

                Console.WriteLine(aluno.Cursos..PadraoId.ToString());
                Console.WriteLine(aluno.Padrao.PadraoNome.ToString());
                Console.ReadKey();
         }
 }
        private static void consulta_Eager_Loading1()
        {
            using (var ctx = new EscolaDBEntities())
            {
                var _aluno = ctx.Alunos.Include("Padrao").Where(a => a.AlunoNome == "Janice").FirstOrDefault();
                Console.WriteLine(_aluno.Padrao.PadraoId.ToString());
                Console.WriteLine(_aluno.Padrao.PadraoNome.ToString());
                Console.ReadKey();
            }
        }

 

Consulta LINQ Método LINQ usando expressão lambda
O código demonstra o recurso eager loading, onde a entidade Padrao será também carregada com a entidade Alunos usando o método Include.
Podemos também usar o recurso eager loading para carregar múltiplos níveis de entidades relacionadas. 
No código abaixo temos um exemplo que mostra como carregar as entidades Aluno, Padrao e Professores relacionadas:
 private static void consulta_Eager_Loading2()
  {
            using (var ctx = new EscolaDBEntities())
            {
                var aluno = (from a in ctx.Alunos.Include("Padrao.Professores")
                                where a.AlunoNome == "Janice"
                                select a).FirstOrDefault<Aluno>();

                Console.ReadKey();
            }
  }
No eager load é preciso informar o caminho completo das associações que você deseja recuperar caso contrário os objetos não serão carregados.

Na próxima aula vamos tratar Lazy Loading no Entity Framework.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti