簡體   English   中英

提供基礎連接的事務范圍無法打開

[英]Transaction Scope giving underlying connection failed to open

對於LINQ,我正在使用TransactionScope處理事務。 當我執行查詢時,我得到一個例外。

基礎連接無法打開。

而內部的例外是關於DTC的說法。 我在線閱讀了我將不得不在服務器上啟用某些服務的信息。 但是我不想那樣做。 如何在不啟用DTC的情況下使用事務處理。 我的代碼是這樣的

public void function1()
{
     using(TransactionScope t = new TransactionScope())
     {
         RunSomeSelectQueries();
         RunSomeInsertQueries();
         RunSomeUpdate Queries();

         t.Complete();
     }
}

提前致謝。

您在交易處理中遇到了一個嚴重的問題,它將把所有負載推到各個級別。

  • TransactioNScope很好,但是
  • 不需打開單獨連接的調用方法是不好的。

原因如下:

  • 如果一個Tx有一個連接,它將在內核中作為本地事務處理。
  • 如果您有多個連接(交易資源),則需要DTC。

和:

  • DTC不僅比連接慢,而且服務器上的負載也很多(多個打開的連接-它們必須保持打開狀態,直到事務提交)。 這也變成了多步驟提交-通常會產生大量開銷,並使事情變慢。

那通常是“嘿,我只使用事務”反模式。

正確地,您應該確保僅創建一個數據庫連接,而不需要一個以上的數據庫連接(例如涉及多個數據庫),以使事務作用域不傳播給具有多個資源的DTC。

顯然,如果需要,您還應該正確配置DTC,但是再次:在這種情況下,真正的問題是您濫用事務范圍,強制進行了實際上不需要DTC傳播的DTC。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM