【问题标题】: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 将执行并成功,自动包装在它自己的自动提交的新事务中。

我的问题是,有没有办法设置一个条件,当在所有这三种方法结束时尝试提交时会自动失败。这样他们就一起回滚,而不是简单的上半场。

【问题讨论】:

    标签: c# mysql sql transactions commit


    【解决方案1】:

    你可以让Thing2返回一个布尔值来表示成功:

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

    【讨论】:

    • 这也是我的想法,但我希望有一个更全面的解决方案,可以附加到取消命令或在更广泛的场景中使用。我必须在整个系统的许多地方都这样做。
    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多