0

아래의 의사 코드를 설명해주십시오.DataContext.Submit 및 TransactionScope

제 아이디어는 다음과 같습니다. 3-SubmitChanges는 o.Status를 커밋하고 o.TransactionId를 커밋하지 않으며 데이터베이스에 개체가 손상됩니다 (더 이상 일관성이 없음).

XDataContext DB = .....; 
XOrder o = DB.XOrders.Single(.......); 

try 
{ 
    using (var t = new TransactionScope()) 
    { 
     o.Status = XOrderStatus.Completed; 
     DB.SubmitChanges(); // 1 
     string s = null; 
     s.Trim(); // crash here; 
     o.TransactionId = ......; // some calculations here 
     DB.SubmitChanges(); // 2 
     t.Complete(); 
    } 
} 
catch (Exception ex) 
{ 
    XEvent e = new XEvent(); 
    e.Type = XEventType.Exception; 
    e.Data = .........; // some calculations here 
    DB.XEvents.InsertOnSubmit(e); 
    DB.SubmitChanges(); // 3 
} 

제 사례에는 어떤 것이 있습니까?

답변

1

제 사례에는 어떤 '우수 사례'가 있습니까?

예. 작업 단위 (UOW) 당 하나의 DataContext 인스턴스를 사용하십시오.

catch (Exception ex) 
{ 
    XEvent e = new XEvent(); 
    e.Type = XEventType.Exception; 
    e.Data = .........; // some calculations here 
    using (XDataContext dc2 = new XDataContext()) 
    { 
    dc2.XEvents.InsertOnSubmit(e); 
    dc2.SubmitChanges(); // 3 
    } 
}