如何创建一个与TransactionScope一起使用的类?

时间:2011-03-10 20:59:20

标签: c# .net .net-4.0 transactions system.transactions

只是想知道,如果我想创建一个可以在TransactionScope中使用的类,我希望能够实现什么呢?

那就是:我的类需要知道它在一个Transaction中,但是如何在Commit或Rollback上得到通知?在Rollback上,我将如何实际回滚?

我假设我的类会有像“添加”,“更新”和“删除”这样的方法,只修改临时的更改列表,以及一个方法“读取”,需要检测它是否在事务中并返回修改或者相应的未经修改的数据,但是我需要一个以某种方式调用的方法Commit / Rollback?

我是否订阅了Transaction.TransactionCompleted事件?如果是,我如何避免对同一交易进行多次订阅?

我注意到交易没有ID,有没有办法管理/兼顾多个并发事务或嵌套事务?

System.Transactions的MSDN文档有很多内容,但它似乎是针对消费者而不是实现者,所以我想知道某人是否有一个好的来源(无论是在网络上还是在书中)服务会为交易提供支持吗?

让我们假设我的类没有已经支持事务的底层存储,并且只能“通过它”。我们假设我的课看起来像这样:

public class MyClass {
    private List<MyObject> _businessData;

    public void Create(Myobject data) { ... }
    public MyObject Read(string query) { ... }
    public void Update(Myobject data) { ... }
    public void Delete(Myobject data) { ... }
}

1 个答案:

答案 0 :(得分:17)

This article可以很好地了解所需内容。它比较旧了,但我相信它仍然适用。

总结一下这篇文章,您需要调用Transaction类上的Enlist个方法之一,并传入IEnlistmentNotification的实现。