实体框架-进入的最后ID

时间:2018-08-16 12:40:45

标签: entity-framework asp.net-core

当前,我正在编写一个应用程序,该程序可以在数据库中保存和删除条目(首先使用实体​​框架进行编码)。我的问题是如何获取下一个数据库ID(配置了自动增量-因此它自动添加了+1)。

我尝试过类似的事情:

var a = databaseContext.MyObject.LastOrDefault().Id;
var myNextDatabaseId = a+1;

此伪代码适用于大多数情况。但是,如果我的数据库中有5个主菜并删除所有5个主菜,则我的下一个数据库计数器将为 6 。当我使用上面的代码时,它将返回“ null”,因为实际上没有任何主菜。但是我必须获得下一个数据库自动增量ID。

是否有可能不会创建新的数据库条目?认为这不必要。

例如以下数据构造:

  1. 插入的条目一(内部ID = 1)
  2. 插入第二个条目(内部ID = 2)
  3. 删除条目一
  4. 删除条目二
  5. 读取最后一个数据库条目(条目= null)。所有数据均已删除,但我正尝试接收下一个自动递增ID 3

1 个答案:

答案 0 :(得分:0)

使用显式事务范围和标识列。尝试在应用程序级别维护ID不可扩展,并且容易出现并发错误。

理想情况下,如果调用失败,则事务应跨越Web服务调用以自动回滚。通过显式事务,您可以调用context.SaveChanges(),它将公开分配给实体的下一个ID,然后在Web服务调用失败时回滚。这可以是由上下文或TransactionScope管理的事务。

请参阅:https://msdn.microsoft.com/en-us/library/dn456843(v=vs.113).aspx