2011-03-10 41 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

相關問題