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

Manipulando Muitos para muitos

Alguém pode me ajudar ? Na hora de realizar um insert na tabela Promocao, acontece o seguinto erro no: contexto.Promocao.Add(promocaoPascoa);

Erro:

 private static void MuitosParaMuitos()
        {

                var p1 = new Produto() {Nome = "Suco de Laranja",Categoria = "Bebidas",PrecoUnitario = 3.50, Unidade = "Litro"};
                var p2 = new Produto() { Nome = "Café", Categoria = "Bebidas", PrecoUnitario = 3.50, Unidade = "gramas" };
                var p3 = new Produto() { Nome = "Macarrão", Categoria = "Alimentos", PrecoUnitario = 3.50, Unidade = "gramas" };

                var promocaoPascoa = new Promocao();
                promocaoPascoa.Descricao = "Pascoa";
                promocaoPascoa.DataInicio = DateTime.Now;
                promocaoPascoa.DataFim = DateTime.Now.AddMonths(3);
                promocaoPascoa.IncluirProduto(p1);
                promocaoPascoa.IncluirProduto(p2);
                promocaoPascoa.IncluirProduto(p3);

            using (var contexto = new LojaContext())
            {
                contexto.Promocao.Add(promocaoPascoa); 
                ExibeEntries(contexto.ChangeTracker.Entries());
                //contexto.SaveChanges();

            }
        }
System.InvalidOperationException: 'The instance of entity type 'PromocaoProduto' cannot be tracked because another instance of this type with the same key is already being tracked. When adding new entities, for most key types a unique temporary key value will be created if no key is set (i.e. if the key property is assigned the default value for its type). If you are explicitly setting key values for new entities, ensure they do not collide with existing entities or temporary values generated for other new entities. When attaching existing entities, ensure that only one entity instance with a given key value is attached to the context.'
3 respostas

Olá, Brendow

Como estão as classes do seu modelo (Promocao, Produto)? Pode postar aqui pra gente?

De qualquer forma, suspeito que você não tenha uma propriedade de chave estrangeira na entidade Produto, estou certo? Se não tiver, adicione como abaixo:

public class Produto
{
    ...
    public int PromocaoId { get; set; } // Será usado como Chave Estrangeira (FK)
    ...
}
solução!

Olá Marcelo .

Obrigado pela força, refiz a aula e percebi que a Tabela de Join PromocaoProduto e criada "Automagicamente" quando crio as referencias em cada clase, Não precisa que eu faça a referencia na classe Contexo criando o DbSet. Por isso estava dando esse erro. estava tentado criar uma tabela com os mesmo registros e chaves. Obrigado pela Disposição. O trabalho de vocês é incrível.

Excelente, Brendow, e muito obrigado pela consideração! Um abraço!