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?