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

그러나 단순히이를 사용하기 전에 고려하시기 바랍니다 : 격리 수준이 좋은 일입니다. 데이터를 안정된 상태로 유지하는 데 도움이됩니다. 이것을 무시하면 모든 종류의 이상한 오류가 발생합니다. 귀하의 데이터베이스는 당신을 도울 수있는 막대한 힘을 가지고 있습니다. 제대로 작동시키지 못하기 때문에 꺼두기 만하지 마십시오.