0

以下の疑似コードを説明してください。

私の考えは次のとおりです。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
}

私の場合の「ベストプラクティス」はありますか?

4

1 に答える 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 に答える