如何在事务上设置挂起的回滚?
Posted
技术标签:
【中文标题】如何在事务上设置挂起的回滚?【英文标题】:How to set a pending Rollback on a Transaction? 【发布时间】:2018-09-07 08:37:32 【问题描述】:我一直在使用 mysql Transactions 来封装在我的方法中执行的几个读/写操作。
private void ReceiveOrderConfirm(object sender)
Db.BeginTransaction();
//succeeds
Thing1();
//canceled by user
Thing2();
//succeeds
Thing3();
Db.CommitTransaction();
这是我的示例情况,为清楚起见进行了简化。
我有一个方法,它在其中做几件事,偶尔将控制权交给其他方法来执行和返回。在此示例中,所有这三种方法都不会出错。但是用户可以选择在 Thing2() 中按下取消按钮。现在,如果我只是在用户按下取消时对我的事务调用回滚,那么 Thing3 将执行并成功,自动包装在它自己的自动提交的新事务中。
我的问题是,有没有办法设置一个条件,当在所有这三种方法结束时尝试提交时会自动失败。这样他们就一起回滚,而不是简单的上半场。
【问题讨论】:
【参考方案1】:你可以让Thing2
返回一个布尔值来表示成功:
if (Thing2())
//
// success, continue
//
Thing3();
Db.CommitTransaction();
else
//
// cancelled, rollback
//
Db.RollbackTransaction();
【讨论】:
这也是我的想法,但我希望有一个更全面的解决方案,可以附加到取消命令或在更广泛的场景中使用。我必须在整个系统的许多地方都这样做。以上是关于如何在事务上设置挂起的回滚?的主要内容,如果未能解决你的问题,请参考以下文章