使用实体框架的批量更新和交易

时间:2019-04-02 12:54:59

标签: .net sql-server entity-framework transactions

当尝试对多个记录执行更新时,调用DbContext.SaveChanges()将它们包装在一个事务中。但是,这似乎不允许其他用户将其数据保存在要更新的表上,并且会收到超时错误。

使用EntityFramework v6.2.0,我试图通过创建一个应用程序来了解幕后行为,该应用程序从数据库中检索多行(通常为800行左右),更新其属性(每行最多6个属性),然后调用DbContext.SaveChanges()。我将生成的SQL登录到输出窗口,然后看到我的更新操作全部包装在单个事务中。在有大量记录更新的保存上,其他用户无法在同一表上执行诸如更新的操作。

我的代码结果符合预期,执行了更新。但是,当我的更新操作当前正在运行时,其他用户试图通过DbContext.SaveChanges()更新同一表中的一行时,就会出现问题。在这种情况下,使用实体框架检索单行并进行更新,然后最终调用DbContext.SaveChanges()。但是,由于执行超时到期,它们会收到SQLException。我怀疑这与我的更新以及我的更新在执行更新操作时包裹在锁定表中的事务有关。

0 个答案:

没有答案