【问题标题】:Do we need to explicitly call Rollback after a failed database transaction我们是否需要在数据库事务失败后显式调用 Rollback
【发布时间】:2020-05-22 18:23:16
【问题描述】:

我遇到的大多数实现事务的代码,都会显式调用 Rollback。我们需要调用 Rollback 吗? Dispose 不会自动调用 Rollback 吗?显式调用 Rollback 的目的是什么?

谢谢大家。

public void DatabaseUpdate ()
{
  using var MyTransaction = MyContext.Database.BeginTransaction () ;

  if (MethodIsSuccessful ())
  {
    MyTransaction.Commit () ;
  }
  else
  {
    // MyTransaction.Rollback () ;  // Not necessary, will be called by Dispose, right ?
  }
}

【问题讨论】:

    标签: asp.net-core ef-core-3.1


    【解决方案1】:

    Dispose() 不调用Rollback(),它只是清理事务对象并确保实体框架不再使用该事务。

    这将我们带到了数据库。 Sql Server documentation 声明

    根据当前的事务隔离级别设置,为支持连接发出的 Transact-SQL 语句而获取的许多资源被事务锁定,直到使用 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 语句完成。长时间未完成的事务可以防止其他用户访问这些锁定的资源,也可以防止日志截断。

    所以是的,如果这是您的意图,您确实需要明确调用 Rollback()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2019-10-24
      • 2017-12-30
      相关资源
      最近更新 更多