2017-02-16 110 views
0

我在一次調用中向兩個表中插入數據時使用了事務範圍。但是,當另一個用戶無法對數據庫執行任何操作時,事務處理範圍會保留數據庫或鎖定特定範圍的數據庫。因此,請告訴我爲避免此類情況的替代解決方案。事務範圍鎖數據庫

using (TransactionScope scope = new TransactionScope()) 
{ 
    CamphorTray_OrderDetails ct = new CamphorTray_OrderDetails(); 

    ct.CamphorTray_ID = ctv.CamphorTray_ID; 
    ct.Temple_ID = ctv.Temple_ID; 
    ct.For_Date = ctv.For_Date; 
    ct.Deity = ctv.Deity; 
    ct.Note_Cash = ctv.Note_Cash; 
    ct.Coin = ctv.Coin; 
    ct.Total_amount = ctv.Total_amount; 
    ct.Created_By = ctv.Created_By; 
    ct.Created_Date = DateTime.Now; 
    ct.Modified_By = ctv.Created_By; 
    ct.Modified_Date = DateTime.Now; 

    CTOD.Insert(ct); 

    InsertAudit_CamphorTray_OrderDetails(ct, "Insert"); 
    scope.Complete(); 
} 
+0

您默認使用什麼隔離級別?這可能是一個原因.... –

回答

2

其他用戶(通過鎖定表和/或行)來訪問您的交易和你訪問他們的能力和數據庫的企圖,以確保該工程的數據的能力可通過TransactionOptions控制。

例如,這將是最不安全的,但可能是最「允許」的方式:

var options = new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }; 

using (var tranScope = new TransactionScope(TransactionScopeOption.Required, options)) 
{ 

但請考慮您只需使用在此之前:隔離級別是好事。它有助於保持數據處於穩定狀態。忽略它會導致各種奇怪的錯誤。你的數據庫有很大的幫助你的力量,不要把它關掉,因爲看起來很難做到。