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();
}
}
}
}