2011-03-10 55 views
24

想知道,如果我想创建一个可以在TransactionScope中使用的类,我需要实现什么?如何创建可与TransactionScope一起使用的类?

也就是说:我的类需要知道它在一个事务中,但它如何在提交或回滚时得到通知?而在回滚时,我将如何实际回滚?

我假设我的类有类似于“添加”,“更新”和“删除”的方法,它只修改临时变更列表,而方法“读取”需要检测它是否在事务中并返回相应地修改或未修改的数据,但然后我需要一个方法提交/回滚,以某种方式被调用?

我是否会订阅Transaction.TransactionCompleted事件?如果是的话,我如何避免多次订阅同一个交易?

我注意到Transactions没有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) { ... } 
} 

回答

14

This article有什么是需要一个很好的概述。年龄较大,但我相信这一切仍然适用。

总结本文,您需要调用Transaction类中的Enlist方法之一,并传递IEnlistmentNotification的实现。

+0

如果有人想知道,这是链接#4谷歌搜索“参与System.Transaction” – 2011-03-10 21:04:12

+1

谢谢。本文是一个很好的概述,但不是很深(例如,如何知道在支持多个并发事务的情况下哪个事务得到提交)。但是,资源管理器作为关键字帮助我找到了诸如http://msdn.microsoft.com/en-us/magazine/cc163688.aspx这样填补空白的文章。 – 2011-03-11 08:05:33

相关问题