【问题标题】:How to create a class that works with TransactionScope?如何创建一个与 TransactionScope 一起使用的类?
【发布时间】:2011-03-10 20:59:19
【问题描述】:

只是想知道,如果我想创建一个做某事的类并且我希望能够在 TransactionScope 中使用,我需要实现什么?

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

我假设我的班级会有像“添加”、“更新”和“删除”这样只修改临时更改列表的方法,以及需要检测它是否在事务中并返回修改后的方法“读取”或相应的未修改数据,但是我需要一个以某种方式调用的方法 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) { ... }
}

【问题讨论】:

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


    【解决方案1】:

    This article 对所需内容有一个很好的概述。它更老了,但我相信这一切仍然适用。

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

    【讨论】:

    • 如果有人想知道,那就是链接 #4 谷歌搜索“参与 System.Transaction”
    • 谢谢。这篇文章是一个很好的概述,但不是很深入(例如,如果我支持多个并发事务,我如何知道哪个事务被提交)。但是资源管理器作为关键字帮助我找到了像msdn.microsoft.com/en-us/magazine/cc163688.aspx 这样的文章来填补空白。
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多