2012-11-06 85 views
0

請在下面解釋我的僞代碼。DataContext.Submit和TransactionScope

我的想法是:3-Submit 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

這是我的案例的任何'最佳實踐'嗎?

是的。每個工作單元使用一個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 
    } 
}