实体框架SET IDENTITY_INSERT

Rup*_*Rup 5 entity-framework entity-framework-4

当我们有一个自动递增ID列时,有没有办法在EF中强制新实体的ID值,即通过EF使用SET IDENTITY_INSERT行为?

我们的要求是,在填写或保存之前,我们的创建表单必须始终为空表单上创建的对象显示新的唯一ID.我们的想法是,可以通过电话向某人读取此ID,然后用户可以在呼叫完成后完成并保存表单.我们可以通过在数据库中插入一个空行来保留ID然后,但是我们有唯一的列和FK; 相反,我已经创建了一个"下一个ID"表,我们使用锁来增加安全性,并且我还要对照对象表中的顶部ID进行测试,这一点也要小心.我们的想法是在我们回写实体时强制使用这个新ID - 但我看不出如何让EF去做.

这是可能的 - 这只是我错过的东西吗?我认为ID甚至不会影响插入,所以我不认为在SaveChanges周围手动调用SET IDENTITY_INSERT会有所帮助.

或者我还需要做别的事吗?我可以看到替代方案:

  • 将我们的ID列更改为不是标识并对其进行手动控制:此处有一个表ID继承,因此这也很棘手.
  • 将DB ID和用户可见ID分隔为单独的列,并在那里记录我们的唯一ID.
  • 空行以保留ID,如上所述; 可能需要一些可空性更改,并修改我们的数据读取代码以忽略这些记录.

谢谢!这是EF4(使用EDMX和生成的类而不是POCO),并且在重要的情况下针对SQL Server 2008.

Ber*_* IT 1

为什么不使用 Guid 作为主键。与自动增量无关,没有并发陷阱等。您只需在创建表单时创建 Guid 即可。将其交给来电者并随后填写表格。当表格被取消时,没有问题。表单完成后,使用创建的 Guid 创建实体,设置实体对象的其他值,将其应用于 (a) 上下文和 SaveChanges()...