如何正确使用TransactionScope?

34

我一直想尝试使用TransactionScope,但我就是无法弄清楚人们认为它有什么用处。所以让我们举个例子:

using(TransactionScope tran = new TransactionScope()) {
    CallAMethodThatDoesSomeWork1();
    CallAMethodThatDoesSomeWork2();
    tran.Complete();
}

因此,最基本的问题是:我该如何编写 "CallAMethodThatDoesSomeWork1()",以便在让 "CallAMethodThatDoesSomeWork2()" 抛出异常时,它知道如何回滚其操作?

1个回答

23

你调用的方法内部的代码需要具备事务意识并参与活动事务。这意味着需要创建或使用资源管理器类(请参见实现自己的资源管理器)。

你可以通过实现IEnlistmentNotification及在事务中注册来实现此目的。当事务完成时,事务管理器将按照该接口定义调用注册的方法,以便你的代码可以执行或撤消工作。


1
哦,我明白怎么做了。希望MSDN关于“TransactionScope”的页面上有所提及——我一直在看那个页面,但完全没能理解TransactionScope的意义。这就是使其工作的神奇接口。现在一切都讲得通了! - Denis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接