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 ответ

Это "лучшие практики" для моего случая?

Да. Используйте один экземпляр 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
   }
}
Другие вопросы по тегам