Back-End

20 out, 2015

Curso Entity Framework – Eager Loading

Publicidade

Nesta aula vamos falar sobre Eager Loading no Entity Framework, que é 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, que é 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 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:

ef_curb121

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

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

Consulta LINQ

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();
         }
 }

Método LINQ usando expressão lambda

 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();
            }
        }

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.