2017-02-16 111 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)) 
{ 

但请考虑您只需使用在此之前:隔离级别是好事。它有助于保持数据处于稳定状态。忽略它会导致各种奇怪的错误。你的数据库有很大的帮助你的力量,不要把它关掉,因为看起来很难做到。