1
resposta

erro ao inserir dados de muito para muito

estou trabalhando com uma api aspnet, porém, com ele tenho que inserir um pedido que a tabela contem agregação muitos para muitos, onde ao passar os paramentos com os Id's ele me retornar o erro que "Não é possível inserir um valor explícito para a coluna de identidade na tabela quando IDENTITY_INSERT está definido como OFF." porém se eu passar outro campo menos os id das das FK ele inseri sem o os ID da FK, no meu banco de dados ele cria a tabela opcionaisPedido com as seguintes colunas: ProdutoId (PK) OpcionalId(PK) PedidoId(FK) OpcionaisId(Fk) creio que por causa desse dois PK o meu problema de não conseguir adicionarcom o enttity, segue o meu código

try
            {
                context.Pedidos.Add(model);
                context.ChangeTracker.Entries();
                await context.SaveChangesAsync();
                return Ok(model);
            }
            catch (Exception ex)
            {
                return BadRequest(new { messagem = "não Funcionou " + ex.InnerException.Message });
            }



Context
protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
modelBuilder
                .Entity<OpcionaisPedido>()
                .HasKey(pa => new { pa.OpcionalId, pa.ProdutoId });

            base.OnModelCreating(modelBuilder);
}

   public DbSet<Pedido> Pedidos { get; set; }
   public DbSet<Opcionais> Opcionais { get; set; }

public class Pedido
    {
        public int Id { get; set; }
        public Embalagem Tamanho { get; set; }
        public IList<OpcionaisPedido> Adicional { get; set; }
        public Sabores Sabor { get; set; }
        public double ValorFinal { get; set; }
        public bool Finalizado { get; set; }
    }
1 resposta

Olá Douglas, tudo bem?

Como está a sua classe Opcionaispedido? Essa é a classe de join, certo?

Acredito que ela deveria estar assim:

public int PedidoId { get; set; }
public int OpcionalId { get; set; }
public Pedido Pedido { get; set; }
public Opcional Opcional { get; set; }

Com isso é para o mapeamento do modelBuilder funcionar com os parâmetros tanto da classe de Join, quanto da do seguinte parâmetro do modelBuilder:

modelBuilder
    .Entity<OpcionaisPedido>()
    .HasKey(pa => new { pa.OpcionalId, pa.ProdutoId });

No aguardo!

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