0

请在下面解释我的伪代码。

我的想法是:第三次 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
}

我的案例有什么“最佳实践”吗?

4

1 回答 1

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
   }
}
于 2012-12-07T16:48:32.847 回答