2
respostas

Lógica do linq aula 8 parte 3

No vídeo o seguinte código é feito:

using(var contexto2 = new LojaContext())
        {
            var promocao = contexto2
                .Promocoes
                .Include(p => p.Produtos)
                .ThenInclude(pp => pp.Produto)
                .FirstOrDefault();

            Console.WriteLine("\nMotrando os produtos da promoção...");
            foreach(var item in promocao.Produtos)
            {
                Console.WriteLine(item.Produto);
            }
        }

Tive bastante dificuldade para entender e ainda não sei se entendi 100%. Existiria alguma analogia para ajudar o entendimento? Fiz os seguintes comentários no meu código para tentar facilitar passo a passo:

var promocao = contexto.Promocoes //Para obter os produtos da promocao, é preciso acessar 
                                                  //a tabela de produtos correspondentes à promoção, 
                                                  //acessando primeiro o intermediário PromocaoProduto
                    .Include(p => p.Produtos)  //Inclui a entidade/classe PromocaoProduto 
                                               //É como um join da tabela Promocoes na table PromocaoProduto, pelo critério de produtos
                    .ThenInclude(pp => pp.Produto) //pp é objeto tipo PromocaoProduto, e selecionamos pelo Produto
                                                   //Assim incluímos o Produto no resultado, vindo de promoções
                                                   //Novamente é como um segundo join na tabela produtos
                                                   //Isto tudo resulta numa lista de produtos
                    .First(x => x.Id == 1);    // Por fim selecionamos se iremos querer por index da promoção, 
                                               //a lista de todas as promoções, etc

Isso está acurado?

2 respostas

Opa, não sou especialista, mas acho que fez todo sentido.

Não da para te explicar minuciosamente sem vizualizar a classe de contexto, mas pense da seguinte forma:

O bloco Using é Somente Leitura, por conta disso, é passado a instância como parâmetro para consumação do objeto: (Já que não conseguirá utilizar de maneira externa ao bloco o parâmetro do using, a não ser que seja declarado fora do escopo do bloco)

No teu caso, está sendo passado o Contexto2.

Resumidamente, estes blocos consomem os métodos contidos nesta classe de contexto para gerar o resultado filtrado desacoplando-os dos demais recursos ali dispostos, tendo em vista que o bloco Using implementa a Interface IDisposable.