我一直在使用MySQL事务来封装在我的方法中执行的几个读/写操作。

private void ReceiveOrderConfirm(object sender)
{
    Db.BeginTransaction();
    //succeeds
    Thing1();

    //canceled by user
    Thing2();

    //succeeds
    Thing3();
    Db.CommitTransaction();
}

为了清楚起见,这里是我的例子。
我有一个方法在里面做了很多事情,偶尔把控制权交给其他方法来执行和返回。在这个例子中,这三种方法都不会出错。但用户可以选择按Thing2()中的取消按钮。现在,如果我只是在用户按下cancel时调用事务回滚,那么Thing3将执行并成功,被自动包装在自己的新trasnaction中,自动提交。
我的问题是,有没有一种方法可以设置一个条件,当在这三种方法的末尾尝试提交时,该条件将自动失败。所以他们都会回到一起,而不是简单的上半场。

最佳答案

您可以让Thing2返回bool以获得成功:

if (Thing2())
{
    //
    // success, continue
    //
    Thing3();
    Db.CommitTransaction();
}
else
{
    //
    // cancelled, rollback
    //
    Db.RollbackTransaction();
}

关于c# - 如何在事务上设置挂起的回滚?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49538244/

10-11 17:31