我們認爲我們瞭解的TransactionScope和嵌套(transactionscope.requires) - 即.NET嵌套的TransactionScope
------------------------------------------------------- inner | outer | ------------------------------------------------------- commit | rollback | no changes are committed commit | commit | all changes are committed rollback | rollback | no changes are committed rollback | commit | ---- doesn't work ----
不過,我想知道,有沒有創造一個TransactionScope,一個嵌套的TransactionScope,依賴的任何方式事務,自定義事務或其他什麼,回滾提交場景也適用? -
即你有一些庫函數,無論出於何種原因都有自己的事務,它的父事務是下的。如果內部成功,那麼外部事務可以訪問任何更改,但是如果內部回滾,外部事務仍處於完全可用狀態,並且完全不受內部事務影響,就好像它從未被調用過一樣?
你在這裏要求什麼_ought_直接支持,恕我直言,但顯然不是。 – 2014-10-31 00:08:27
我同意。 - 而且我們已經解決了這個問題,但是在這一點上,它更像是一種知識上的好奇心 - 也就是說,它實際上可以使它像那樣工作嗎?我正在考慮像使用繼承範圍的東西,並且重寫dispose,所以它只會記住它,但接下來的一段代碼會看到數據庫,就好像你提交了事務 - 或者有某種方法可以神奇地捕獲它,然後再創建另一個交易範圍 - 但之後你會失去所有發生的事情。這是一個非常有趣的問題! – 2014-10-31 03:49:09
我相信你會把數據庫事務(它有助於強制執行數據一致性和原子更改)與其他工作單元混淆在一起。從數據一致性的角度來看:如果外層依賴於內層(即內層嵌套在外層),那麼內層回滾之後永遠不會想要繼續。如果不是這樣,外部不依賴於內部。在這種情況下,嵌套事務是您的任務的錯誤工具。通過重構,通常可以得到所需結果的更好方法:使用順序事務(不嵌套),搶先檢查(如果內部將通過)等。 – Arkaine55 2015-09-08 15:59:51