IDENTITY_INSERT ON不被实体框架DBSet.Add方法所尊重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDENTITY_INSERT ON不被实体框架DBSet.Add方法所尊重相关的知识,希望对你有一定的参考价值。

我运行此查询:

context.Database.SqlCommand("SET IDENTITY_INSERT [Songs] ON;");

就在我从.Add()执行DbSet方法之前。

我的数据仍在使用标识值而不是我提供的ID。

我只是暂时想要这个(用于数据迁移),以后它应该保留为自动生成的身份。

我正在为数据库使用SQL Server CE 4。

答案

EF无法猜测您已经执行了IDENTITY_SET命令并相应地更改了其内部逻辑。

如果需要插入特定的Id值,也可以使用SqlCommand进行插入。

另一答案

这可能是个问题。 DbContext本身处理数据库连接。仅当在与打开身份插入相同的连接上执行插入时,此方法才有效。我认为它会在此命令后释放连接。您可以尝试使用其他DbContext的构造函数,并传递自己打开的DbConnection实例并自行处理其关闭。

以上是关于IDENTITY_INSERT ON不被实体框架DBSet.Add方法所尊重的主要内容,如果未能解决你的问题,请参考以下文章

实体框架抛出无法在表中插入标识列的显式值...当 IDENTITY_INSERT 设置为 OFF 错误

无法插入显式值,因为 IDENTITY_INSERT 为 OFF,但无法将 IDENTITY_INSERT 设置为 ON,因为它已经为 ON

Roles.AddUsersToRoles() 要求 IDENTITY_INSERT 为 ON

set IDENTITY_INSERT on 和 off 的设置

SET IDENTITY_INSERT ON|OFF 的解惑

给标识列显示的添加数据(IDENTITY_INSERT 为 ON)