Durante a execução do meu código para salvar a promoção no banco, o mesmo me retorna o erro "SqlException: Cannot insert explicit value for identity column in table 'Produtos' when IDENTITY_INSERT is set to OFF."
Segue cód das classes abaixo.
static void Main(string[] args)
{
var promocao = new Promocao();
promocao.Descricao = "Semana Gamer";
promocao.DataInicio = new DateTime(2020, 7, 1);
promocao.DataInicio = promocao.DataInicio.AddDays(7);
var produtos = new ProdutoDAOEntity()
.GetProdutos()
.Where(p => p.Categoria == "Games")
.ToList();
foreach (var produto in produtos)
{
promocao.IncluirProduto(produto);
}
using (var contexto = new LojaContexto())
{
contexto.Promocoes.Add(promocao);
contexto.SaveChanges();
}
}
public class Promocao
{
public int Id { get; set; }
public string Descricao { get; set; }
public DateTime DataInicio { get; set; }
public DateTime DataTermino { get; set; }
public IList<PromocaoProduto> Produtos { get; set; }
public Promocao()
{
Produtos = new List<PromocaoProduto>();
}
public void IncluirProduto(Produto produto)
{
Produtos.Add(new PromocaoProduto() { Produto = produto });
}
}
public class Produto
{
public int Id { get; internal set; }
public string Nome { get; internal set; }
public string Categoria { get; internal set; }
public double PrecoUnidade { get; internal set; }
public string Unidade { get; set; }
public IList<PromocaoProduto> Promocoes { get; set; }
public override string ToString()
{
return $"Produto: {Nome}, Categoria: {Categoria}, Preço: {PrecoUnidade}";
}
}
public class PromocaoProduto
{
public int ProdutoId { get; set; }
public Produto Produto { get; set; }
public int PromocaoId { get; set; }
public Promocao Promocao { get; set; }
}
class LojaContexto : DbContext
{
public DbSet<Produto> Produtos { get; set; }
public DbSet<Compra> Compras { get; set; }
public DbSet<Promocao> Promocoes { get; set; }
public DbSet<Cliente> Clientes { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<PromocaoProduto>()
.HasKey(pp => new { pp.PromocaoId, pp.ProdutoId });
modelBuilder
.Entity<PromocaoProduto>()
.HasOne(pp => pp.Produto)
.WithMany(pp=> pp.Promocoes)
.HasForeignKey(pp => pp.ProdutoId);
modelBuilder
.Entity<PromocaoProduto>()
.HasOne(pp => pp.Promocao)
.WithMany(pp => pp.Produtos)
.HasForeignKey(pp => pp.PromocaoId);
modelBuilder
.Entity<Endereco>()
.ToTable("Enderecos");
modelBuilder
.Entity<Endereco>()
.Property<int>("ClienteId");
modelBuilder
.Entity<Endereco>()
.HasKey("ClienteId");
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=LojaDB;Trusted_Connection=true;");
}
}