Linq2Sql DataContext и TransactionScope, вложенные неправильно? - PullRequest
0 голосов
/ 20 ноября 2011

В нашем текущем проекте случалось так, что мы иногда вкладывали создание DataContext и TransactionScope следующим образом:

using(var dc = OurDataContext.CreateInstance())
{
    DoSomething(dc);
    ...
}

void DoSomething(OurDataContext dc)
{
    using(var scope = new TransactionScope())
    {
        // DoSomethingElse() might call dc.SubmitChanges() which is why
        // we inserted the TransactionScope here
        DoSomethingElse(dc);
        dc.SubmitChanges();
        scope.Complete();
    }
}

Действительно ли это работает так, как мы ожидаем?

(Несмотря на то, что крайние сроки были жесткими, обнаруживать подобный код довольно неловко.)

1 Ответ

1 голос
/ 20 ноября 2011

Это может быть не совсем так, как если бы у вас было больше времени, это должно сработать так, как вы ожидаете. У вас есть область транзакции для одного контекста данных, и вся ваша работа выполняется в рамках этой транзакции. Он должен фиксироваться или откатываться так, как вы ожидаете.

Вы, вероятно, понимаете, что передача объекта контекста данных, вероятно, не самый эффективный способ совместного использования объекта контекста. Одна из возможных альтернатив - создать объект контекста, а затем использовать ThreadStaticObject, чтобы разделить его между методами. Мы делаем это довольно часто.

...