Dot-Net
TransactionScope 與 IDbTransaction
與 IDbTransaction 相比,使用 TransactionScope 有哪些優點/缺點?我會建議一些 - 請更正/完成列表。
TransactionScope 的優點:
- TransactionScope 支持分佈式事務 - 您可以訪問多個數據源或在一個事務中使用多個連接到一個數據源。
- TransactionScope 更具聲明性:我們可以嵌套 TransactionScopes,使用它的服務層更令人愉快(我們不必自己處理 IDbConnection 和 IDbTransaction)。
- 我不確定第三點,但就是這樣。IDbTransaction 特定於連接 - 您必須在整個事務期間保持連接打開。我不確定是否應該在整個 TransactionScope 期間打開連接/連接(請澄清)。如果沒有,以下工作流程是可能的:開始事務,打開連接 - 查詢 - 檢索 - 關閉連接,執行資源密集型計算(保持連接關閉),打開連接 - 查詢 - 檢索 - 關閉連接,…,送出事務。但我想 TransactionScope 不可能保持連接打開直到送出。
TransactionScope的缺點:
- 它不支持在事務期間更改 IsolationLevel。
方便很重要——尤其是因為它可以用來包裝你無法控制的程式碼(因為你包裝的程式碼預設情況下會自動登記)。這意味著您可以包裝使用伺服器的預先存在的庫
性能會受到輕微影響,但請注意,在許多情況下,您將使用輕量級事務管理器,而不是 DTC - 這意味著您無需支付全部 DTC 成本。
另一個缺點是嵌套事務不能回滾;任何回滾都會立即回滾外部事務。我個人喜歡這種方法;如果出現問題 - 盡快停止這樣做。
重新查詢第 3 點;您可以在事務範圍內打開/關閉任意數量的連接,而不會影響行為,除非您可能會發現(取決於情況)您的事務提升到 DTC。如果您與多個交易感知伺服器交談,幾乎可以保證提升。
另一個區別:適用不同的超時,尤其是在涉及 DTC 的情況下。這是有道理的:長時間執行的分佈式事務是有毒的,並且可能表示跨伺服器死鎖。死鎖通常在單個伺服器上檢測到,但在分發時幾乎不可能自動發現,因此硬超時是必不可少的。