Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

O fluxo abaixo está correto? Além disso, gostaria de resposta para as dúvidas que seguem

1º. Um objeto do tipo Promoção é criado com o nome promocaoDePascoa:

var promocaoDePascoa = new Promocao() { Descricao = "Páscoa", DataInicio = DateTime.Now, DataTermino = DateTime.Now.AddMonths(3) };

2º. São criados três produtos e adicionados à lista Produtos do objeto promocaoDePascoa:

Produto p1 = new Produto() { Nome= "Suco de Laranja", Categoria = "Bebidas", PrecoUnitario = 8.50, Unidade = "Litros"  };
Produto p2 = new Produto() { Nome = "Café", Categoria = "Bebidas", PrecoUnitario = 12.45, Unidade = "Gramas" };
Produto p3 = new Produto() { Nome = "Macarrão", Categoria = "Alimentos", PrecoUnitario = 4.23, Unidade = "Gramas" };

promocaoDePascoa.Produtos.Add(new PromocaoProduto() { Produto = p1 });
promocaoDePascoa.Produtos.Add(new PromocaoProduto() { Produto = p2 });
promocaoDePascoa.Produtos.Add(new PromocaoProduto() { Produto = p3 });

3º. A promocaoDePascoa com suas propriedades já preenchidas é salva no banco de dados:

using (var contexto = new LojaContext())
            {
                contexto.Promocoes.Add(promocaoDePascoa);
                contexto.SaveChanges();
            }

Dúvidas: 1) Na 2º etapa, por quê o produto que está sendo adicionado tem que ser do tipo PromocaoProduto?

2) Em qual momento os dados são persistidos na tabela PromocaoProduto?

2 respostas
solução

Fala, xará! Tudo certo? Vamos às respostas:

1) PromocaoProduto é a classe que representa a tabela de join necessária para relacionamentos M para N. É um objeto dessa classe que precisa ser adicionado na lista de produtos da promoção.

2) Os dados são persistidos em todas as tabelas (e não só na tabela PromocaoProduto) ao chamarmos o método SaveChanges(). Isto significa que se você esquecer de chamá-lo os dados não serão persistidos!

Espero ter ajudado. Abraços!

Muito obrigado, professor!