目前我正在编写一个应用程序,用于保存和删除数据库中的条目(首先使用实体框架进行代码(。我的问题是我如何获取下一个数据库 ID(配置了自动增量 - 因此它会自动添加 +1(。
我尝试了类似的东西:
var a = databaseContext.MyObject.LastOrDefault().Id;
var myNextDatabaseId = a+1;
此伪代码适用于大多数情况。但是,如果我的数据库中有 5 个主菜并删除所有五个主菜,我的下一个数据库计数器将是6。当我使用上面的代码时,它将返回"null",因为实际上没有主菜。但是我必须获得下一个数据库自动增量 ID。
是否有可能不创建新的数据库条目?认为这应该是不必要的。
例如,以下数据构造:
- 插入的条目 1(内部 ID = 1(
- 插入的条目 2(内部 ID = 2(
- 删除条目一
- 删除第二项
- 读取最后一个数据库条目(条目 = 空(。所有数据都已删除,但我正在尝试接收下一个自动增量 id3
使用显式事务范围和标识列。尝试在应用程序级别维护 ID 是不可缩放的,并且容易出现并发错误。
理想情况下,事务应跨越 Web 服务调用,以便在调用失败时自动回滚。使用显式事务,可以调用context.SaveChanges()
,这将公开分配给实体的下一个 ID,然后在 Web 服务调用失败时回滚。这可以是由上下文或TransactionScope
管理的事务。
请参阅:https://msdn.microsoft.com/en-US/library/DN456843(v=vs.113(.aspx