实体框架 DBSet.Add 方法不遵守 IDENTITY_INSERT ON
我运行此查询:
context.Database.SqlCommand("SET IDENTITY_INSERT [Songs] ON;");
就在从 DbSet
执行 .Add()
方法之前。
我的数据仍然使用身份值而不是我提供的 ID。
我只是暂时想要这个(用于数据迁移),然后它应该在将来保持自动生成的身份。
我的数据库使用 SQL Server CE 4。
I run this query:
context.Database.SqlCommand("SET IDENTITY_INSERT [Songs] ON;");
just before I do the .Add()
method from a DbSet
.
My data still is using the identity value instead of the ID that I'm supplying.
I only want this temporarily (for data migration) and then it should remain auto generated identity in the future.
I'm using SQL Server CE 4 for my database.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这可能是一个问题。
DbContext
处理数据库连接本身。仅当在与打开身份插入相同的连接上执行插入时,此功能才有效。我认为它会在执行此命令后释放连接。您可以尝试使用不同的 DbContext 构造函数并传递自己打开的 DbConnection 实例并自行处理其关闭。This can be a problem.
DbContext
handles db connection itself. This works only if inserts are executed on the same connection as turning on identity insert. I think it releases the connection after this command. You can try to use different DbContext's constructor and pass your own openedDbConnection
instance and handle its closing by yourselves.EF 无法猜测您已经执行了 IDENTITY_SET 命令并相应地更改其内部逻辑。
如果您需要插入特定的 Id 值,也可以使用 SqlCommand 进行插入。
EF can't guess that you've executed an IDENTITY_SET command and change its internal logic accordingly.
If you need to insert specific Id values, use SqlCommand for the inserts too.