我一直在使用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/