我正在尝试将记录插入具有自动生成的ID的表中。因此,这是我的代码:
using (var context = new DbContext(GetConnection().Options))
{
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Customers ON;");
context.SaveChanges();
context.Customers.Add(customer);
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Customers OFF;");
}
但例外始终是相同的:
当IDENTITY_INSERT设置为OFF时,无法在表'Customers'中为身份列插入显式值。
[我也试图在SQL Server Management Studio中手动执行命令SET IDENTITY_INSERT dbo.Customers ON
,并在执行了上面的代码之后,但是抛出了相同的异常。
为什么?
默认情况下,实体框架不会尝试插入您的标识列,并且会引发错误消息。
为了克服这一点,您已经完成了第一步。但是,第二步,您需要告诉实体框架此字段可插入。您可以通过2种不同的方式来执行此操作。
HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
添加到主列。[DatabaseGenerated(DatabaseGeneratedOption.None)]
。