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

我正在尝试将记录插入自动生成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时,无法为表“客户”中的身份列插入显式值。

我还尝试在SQL Server Management Studio中手动执行命令SET IDENTITY_INSERT dbo.Customers ON,并在执行了上面的代码之后,但是抛出了相同的异常。

为什么?

bojing521 回答:SET IDENTITY_INSERT TableName ON在Entity Framework Core 2.2上不起作用

默认情况下,当您尝试为身份列插入值时,实体框架将引发错误。即使启用test('Register',async t => { await t .typeText(registrationPage.input.firstName,firstName) .typeText(registrationPage.input.email,userEmail) .typeText(registrationPage.input.password,userPass) .typeText(registrationPage.input.mobileNumber,'22333') .click(registrationPage.button.next) await t .typeText('registrationPage',code) }); ,它也会处于数据库级别而不是Entity Framework。

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

  1. 转到模型类,然后将identity_insert添加到“标识”列中。使用此方法,您可以插入带有标识列的记录,而不必依赖事务。

  2. 此外,您可以在同一连接中执行整个代码。这样,当您尝试插入记录时,EF Core将不会引发错误。请检查以下代码。

    [DatabaseGenerated(DatabaseGeneratedOption.None)]

更新

using (var db = new Context()) { db.Categories.Add(new Category { Id = 5,Name = "test" }); db.Database.OpenConnection(); try { db.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Categories ON;"); db.SaveChanges(); db.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Categories OFF;"); } finally { db.Database.CloseConnection(); } } 也可以仅在使用实体框架时使用。实体框架核心Fluent API没有针对HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)的实现。

本文链接:https://www.f2er.com/3108349.html

大家都在问