2009-07-02 75 views
2

我正在尋找設計問題的解決方案。這將需要一些解釋。我會張貼代碼,但這會讓這個更長。TransactionScope和回滾對象狀態

我有一個自定義泛型集合,用於根據需要保存Business Objects。爲便於參考,請撥打業務對象BO和通用集合GC。內部GC我有一個私人收集那些已被標記爲刪除的業務對象。致電此私人收藏PDC

我可以有任意數量的GC,每個都有自己的PDC,在任何時候,還有其他沒有任何集合的BO。

當我保存更改時,我循環遍歷所有BO和GC,並讓每個保存更改。這發生在一個TransactionScope中,所以我回滾數據庫的變化,如果有任何東西無法正確保存。

GC保存時我的PDC狀態有問題。 GC首先保存所有更新的BO,然後刪除與PDC中的BO相關的記錄,然後清除所有BO的PDC。我這樣做是爲了使GC的狀態正確地反映數據庫的新狀態。

現在假設一個或多個GC成功保存後,BO或GC未能保存。 TransactionScope執行回滾。從數據庫中刪除的記錄被還原,但部分/所有的PDC已被清除,並且狀態信息丟失

所以這裏是我的困惑:我如何保持PDC的信息,直到提交發生之後,然後保證清除了適當的集合?

TransactionScope沒有任何事件我可以趕上讓我知道什麼時候它的變化已經提交。任何給定的交易都有可能受到許多交易所和GC的影響,所以我不能限制交易一次處理一個GC。

有什麼建議嗎?

回答

2

TransactionStarted由事務管理器引發,TransactionCompleted由事務本身引發。

您可能希望GC實施IEnlistmentNotification;有一個例子可以幫助你。

您可能還想檢查DNR TV show 113114

+0

這看起來很完美。感謝您的鏈接。這應該解決我的問題 – 2009-07-02 18:47:04