6
respostas

Cannot insert explicit value for identity column in table 'Produtos' when IDENTITY_INSERT is set to OFF.

Boa tarde,

Estou desenvolvendo um pequeno sistema para Cadastro de produtos e digitação de pedidos para aprimorar o conhecimento obtido no curso. O sistema possui a classe produto, a classe Item que possui um produto e a quantidade do mesmo, e também uma classe Pedido que vai trazer a coleção de itens.

   public class Produto {
        public int Id { get; set; }
        public string Nome { get; set; }
        public double Preco { get; set; }
        public string Categoria { get; set; }
        public string Unidade { get; set; }
}
    class Item {
        public int Id { get; set; }
        public Produto Produto { get; set; }
        public double Quantidade { get; set; }
        public double Valor;
}
class Pedido {
        public int Id { get; set; }
        public IList<Item> Itens { get; set; }
        public double ValorTotal { get; set; }
}

Os produtos são adicionados aos Itens, e pelos teste que realizei os itens são adicionados ao Pedido. Porém, ocorre erro na linha saveChanges();

Exceção interna 1: SqlException: Cannot insert explicit value for identity column in table 'Produtos' when IDENTITY_INSERT is set to OFF.

No que estou errando?

6 respostas

Provavelmente este erro está ocorrendo por que você está tentando inserir um valor em uma coluna no banco de dados que está marcada como Auto Increment ( Valor que irá incrementar sozinho ... )

Realizei o procedimento para apresentar o SQL gerado no Console e verifiquei que ele tá gerando para salvar novamente os produtos no BD ao invés de salvar os itens e os pedidos referenciado os produtos cadastrados.

INSERT INTO [Produtos] ([Id], [Categoria], [Nome], [Preco], [Unidade])
VALUES (@p1, @p2, @p3, @p4, @p5);

Quais as alternativas nesses casos?

Então, acontece que estou tentando te ajudar as cegas, pois não sei nem se estás a utilizar algum framework ou algo do gênero, poderia ser mais especifico em como estás a salvar os dados ?

Estou apenas utilizando a Lógica para tentar te dar uma luz do problema, pois nem em C# ( acredito que seja está a linguagem por causa dos get e set apresentados ) eu programo :x

Sim, esta linguagem é C# e estou utilizando o Entity Framework Core, conforme o fórum no qual abri a dúvida.

O meu está dando o mesmo erro. Alguém consegue nos ajudar?

No meu caso pelo que eu verifiquei o Entity estava tentando salvar um objeto que já estava no banco.

Minha solução foi Popular os objetos pedidos e itens com produtos retornados do BD pelo Id. E não instanciar um novo.