Back-End

23 out, 2015

Curso Entity Framework – Lazy Loading

Publicidade

Nesta aula iremos abordar o Lazy Loading, que é o mecanismo utilizado pelos frameworks de persistência para carregar informações sobre 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 disso, eles são carregados automaticamente quando a propriedade de navegação for acessada.

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 nesta aula para mostrar o recurso Lazy Loading.

Abra a solução EF6_EscolaDB criada na aula anterior. Logo após, inclua um novo projeto do tipo Console Application com o nome EF6_LazyLoad na solução.

Para concluir, inclua uma referência ao projeto EF6_LazyLoad para o projeto EF6_EscolaDB. Inclua a string de conexão no arquivo App.Config do projeto.

No Lazy Loading, o Entity Framework adia o carregamento das entidades relacionadas até você especificar isso em uma requisição explicitamente.

Vejamos um exemplo deste comportamento no trecho de código abaixo, onde estamos obtendo os alunos e, a seguir, seus endereços.

A classe Aluno contém a propriedade complexa AlunoEndereco.

No modo padrão, o contexto do EF atua da seguinte forma:

  • Primeiro carrega todos os alunos do banco de dados;
  • Então, ele irá carregar os endereços de um aluno particular quando o acesso à propriedade AlunoEndereco for feita.

Versão C#

private static void consulta_Lazy_Loading1()
   {
         using (var ctx = new EscolaDBEntities())
          {
                //carrega apenas os alunos
               IList<Aluno> listaAlunos = ctx.Alunos.ToList<Aluno>();
                Aluno aluno = listaAlunos[0];
                //carrega os enderecos para um aluno particular
                AlunoEndereco ende = aluno.AlunoEndereco; 
        }
  }

Versão VB .NET

Private Shared Sub consulta_Lazy_Loading1()

	Using ctx = New EscolaDBEntities()
		'carrega apenas os alunos
		Dim listaAlunos As IList(Of Aluno) = ctx.Alunos.ToList(Of Aluno)()

		Dim aluno As Aluno = listaAlunos(0)
		'carrega os enderecos para um aluno particular
		Dim ende As AlunoEndereco = aluno.AlunoEndereco
	End Using

End Sub

Temos aqui o que é conhecido como Lazy Load, ou em outras palavras “se o programador não solicitar a carga, o relacionamento entre entidades não será recuperado”.

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