Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Modo Lazy

Olá Victor. Não consegui entender muito bem o que quis dizer no texto abaixo que está neste exercício. Poderia tentar me explicar de uma outra forma, ou então me dar algum exemplo?

Texto da resolução do exercício:

"No exercício anterior, quando mostramos a categoria na lista de produtos, o Entity Framework lançou uma nova exceção, isso aconteceu porque dentro do Entity Framework, os relacionamentos são carregados apenas quando utilizados pela aplicação, mas essa busca é feita enquanto estamos dentro do for buscando a lista de produtos, portanto o Entity Framework está tentando executar duas consultas simultâneas no banco de dados!"

2 respostas
solução!

Olá Marcelo

Quando carregamos uma entidade pelo entity framework, por exemplo, o produto que é utilizado no curso, o framework envia uma query apenas para a tabela de produtos, a tabela de categorias não é acessada, ela só é acessada quando a utilizamos no código:

// Essa linha consulta apenas a tabela de produtos
// A categoria ainda não foi carregada do banco de dados.
Produto produto = contexto.Produtos.Find(1);

// Nessa linha estamos tentando utilizar a categoria
// e, por isso, ela é carregada do banco de dados.
// Nessa linha o Entity Framework faz a consulta
// na tabela de categorias
Console.WriteLine(produto.Categoria.Nome);

O exemplo utilizado no curso é quase igual ao descrito acima:

// Nessa linha o Entity Framework só faz a consulta
// na tabela de produtos do banco de dados. A
// categoria ainda não foi carregada
IEnumerable<Produto> produtos = contexto.Produtos;

foreach(var produto in produtos)
{
    // Nessa linha estamos tentando utilizar a categoria
    // e por isso o Entity Framework precisa
    // executar uma busca no banco de dados para
    // carregar a categoria do produto.
    Console.WriteLine(produto.Categoria.Nome);
}

O problema nesse segundo caso é que quando estamos iterando na lista de produtos, o Entity Framework ainda está recebendo o resultado do banco de dados, a query para listar os produtos ainda não terminou de ser executada, e a aplicação está tentando carregar a lista de produtos enquanto um outro comando está sendo executado, portanto temos dois comandos simultâneos para o banco de dados, o que normalmente não deveria acontecer.

Olá Marcelo

A sua dúvida foi resolvida? Se sim, por favor marque a solução.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software