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

Exceção sem tratamento no context.SaveChanges()

Criei um .sln novo com uma Database e os arquivos do EntityFramework.Sql server 1.1 . Criei uma database chamada "StoreDB" com uma tabela chamada "Products"

CREATE TABLE [dbo].[Products] (
    [Id]       INT IDENTITY (1, 1) NOT NULL ,
    [Name]     NVARCHAR (MAX) NULL,
    [Category] NVARCHAR (MAX) NULL,
    [Price]    FLOAT (53)     NULL,
    CONSTRAINT [PK_Products] PRIMARY KEY ([Id])
);
`

Fiz a minha classe de produto chamada Product e a minha classe de contexto

   public class Product
    {
        public int Id { get; private set; }
        public string Name { get; private set; }
        public double Price { get; private set; }
        public string Category { get; private set; }
        public Product(string name, string category, double price)
        {
            Name = name;
            Price = price;
            Category = category;

            Id = name.GetHashCode();
        }





    }

   public class StoreContext : DbContext
    {
        public DbSet<Product> Products { get; private set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
           var Server = optionsBuilder.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Database=StoreDB;Trusted_Connection=true;");
            Console.WriteLine(Server);
        }


    }

No momento que vou rodar meu código na classe program, aparece uma exceção sem tratamento chamada Microsoft.EntityFramework.DbUpdateException. Coloquei um bloco Try/Catch para poder ver a mensagem e a mensagem da Inner (a exceção principal pede para olhar a Inner) e a mensagem foi:

"An error occurred while updating the entries. See the inner exception for details. // InnerMessage: Cannot insert explicit value for identity column in table 'Products' when IDENTITY_INSERT is set to OFF."

class Program
    {
        static void Main(string[] args)
        {


            RegisterProductUsingEntity();

            Console.ReadLine();
        }

        private static void RegisterProductUsingEntity()
        {
            var HarryPotterBook = new Product(name: "Harry Potter and the Goblet of Fire", category: "Book", price: 19.00);

            using (var context = new StoreContext())
            {
                try
                {

                    context.Add(HarryPotterBook);
                    context.SaveChanges();
                    Console.WriteLine("ProductRegisted!");
                }
                catch(Microsoft.EntityFrameworkCore.DbUpdateException ex)
                {
                    Console.WriteLine($"ExceptionMessage:{ex.Message} // InnerMessage: {ex.InnerException.Message}");
                    Console.ReadLine();
                }



            }
        }
    }
2 respostas
solução!

O erro está acontecendo porque você está informando o Id e seu banco de dados está usando auto incremento.

Ou seja, não está aceitando o insert do id.

Fiz um novo campo chamado Product ID ao invés de só ID na classe do produto. Agora consigo pegar o código do produto e guardar no banco sem tentar mudar o ID do banco!

Agora está funcionando!