SET IDENTITY_INSERT TableName ON在Entity Framework Core 2.2上不起作用

问题描述 投票:-1回答:1

我正在尝试将记录插入具有自动生成的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,并在执行了上面的代码之后,但是抛出了相同的异常。

为什么?

c# sql-server entity-framework-core aspnetboilerplate
1个回答
0
投票

默认情况下,实体框架不会尝试插入您的标识列,并且会引发错误消息。

为了克服这一点,您已经完成了第一步。但是,第二步,您需要告诉实体框架此字段可插入。您可以通过2种不同的方式来执行此操作。

  1. 转到您的上下文文件,然后为您的表找到映射。将HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)添加到主列。
  2. 转到您的模型类,然后在您的标识栏中添加[DatabaseGenerated(DatabaseGeneratedOption.None)]
© www.soinside.com 2019 - 2024. All rights reserved.