C# 如何在事务上设置挂起的回滚?
我一直在使用MySQL事务来封装在整个方法中执行的几个读/写操作C# 如何在事务上设置挂起的回滚?,c#,mysql,sql,transactions,commit,C#,Mysql,Sql,Transactions,Commit,我一直在使用MySQL事务来封装在整个方法中执行的几个读/写操作 private void ReceiveOrderConfirm(object sender) { Db.BeginTransaction(); //succeeds Thing1(); //canceled by user Thing2(); //succeeds Thing3(); Db.CommitTransaction(); } 这是我的示例情况,为了
private void ReceiveOrderConfirm(object sender)
{
Db.BeginTransaction();
//succeeds
Thing1();
//canceled by user
Thing2();
//succeeds
Thing3();
Db.CommitTransaction();
}
这是我的示例情况,为了清晰起见简化了
我有一个方法,它在里面做一些事情,偶尔会将控制权传递给其他方法来执行和返回。在本例中,这三种方法都不会出错。但是用户可以选择按Thing2()中的取消按钮。现在,如果我只是在用户按下cancel时对我的事务调用回滚,那么Thing3将执行并成功,自动包装在它自己的自动提交的新事务中
我的问题是,有没有一种方法可以设置一个条件,当在这三种方法的末尾尝试提交时,该条件将自动失败。因此,它们都会一起回滚,而不是简单的上半部分。您可以让
Thing2
返回一个bool来获得成功:
if (Thing2())
{
//
// success, continue
//
Thing3();
Db.CommitTransaction();
}
else
{
//
// cancelled, rollback
//
Db.RollbackTransaction();
}
这也是我所想的,但我希望有一个更全面的解决方案,可以附加到cancel命令或在更广泛的场景中使用。我必须在整个系统的许多地方这样做。