Estou com esse problema abaixo:
SqlException: Cannot insert explicit value for identity column in table 'Usuarios' when IDENTITY_INSERT is set to OFF.
Esse problema vem sendo recorrente durante todo o curso e eu pude observar que ele ocorre quando eu tento inserir um objeto dentro de um inicializador de outro objeto e ao rodar o programa, o comando SaveChanges() não permite a inserção no banco.
Nas outras ocasiões que isto ocorreu, eu simplesmente substitui um atributo do objeto que estava sendo criado pelo id discreto invés do objeto (exemplo: invés de passar um objeto inteiro de Categoria ao criar um objeto Produto, eu simplesmente passava um número id e com isso contornava o problema). Como podemos observar a seguir:
- Invés disso ( que dá erro ao executar SaveChanges()):
Categoria categoria = contexto.Categorias.BuscaPorId(1);
// onde o id da Categoria 1 corresponde a Informatica
Produto pErro = new Produto()
{
Nome = "Mouse",
Preco = 30,
Categoria = categoria
};
- Contornei o erro executando o seguinte:
Produto pOK= new Produto()
{
Nome = "Mouse",
Preco = 30,
CategoriaID = 1
};
Ao que eu pude pesquisar, esse erro ocorre no fato de que eu estou tentando inserir um valor em uma coluna primária e o próprio EntityFramework fica encarregado de preencher o valor dessa coluna com um número incremental de acordo com a inserção.
Queria entender melhor como contornar e evitar esse problema.. Já tentei soluções como ao declarar o model, antes do atributo que será a primary key, declarar a seguinte propriedade:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Agora o problema está ocorrendo ao tentar realizar a Aula 6, ao tentar cadastrar vendas de produtos no código abaixo:
static void Main(string[] args)
{
EntidadeContext contexto = new EntidadeContext();
UsuarioDao uDao = new UsuarioDao();
Usuario user = uDao.BuscaPorId(1);
Venda v = new Venda()
{
Cliente = user
};
Produto p = contexto.Produtos.FirstOrDefault(produto => produto.ID == 2);
Produto p2 = contexto.Produtos.FirstOrDefault(produto => produto.ID == 3);
ProdutoVenda pv = new ProdutoVenda()
{
Venda = v,
Produto = p
};
ProdutoVenda pv2 = new ProdutoVenda()
{
Venda = v,
Produto = p2
};
contexto.Vendas.Add(v);
contexto.ProdutoVenda.Add(pv);
contexto.ProdutoVenda.Add(pv2);
contexto.SaveChanges(); // ERRO AQUI
Console.ReadLine();
}