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