以下の疑似コードを説明してください。
私の考えは次のとおりです。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
}
私の場合の「ベストプラクティス」はありますか?