2013-09-14 1 views
0

После создания транзакции TransactionScope я создал контекст EF и сохранил некоторые данные, затем снова создал другой контекст EF и сохранил данные. Во втором EF я получил ошибку «MSDTC на [SERVER] недоступен».TransactionScope, эскалация транзакций для той же строки подключения

Проблема решена с помощью одного контекста EF для всего, что находится внутри транзакции. Я думал, что если бы я использовал одну и ту же строку соединения, нет необходимости в эскалации транзакций.

У кого-нибудь есть объяснения, каковы ваши сомнения?

ответ

2

В целях предотвращения эскалации транзакций, больше, чем просто с помощью строки соединения же , вы должны использовать тот же SQL connetcion.

Согласно MSDN, эскалация, что приводит к System.Transactions инфраструктуры передачи права собственности на сделки с MSDTC случается, когда:

По крайней мере, два прочных ресурсы, которые поддерживают однофазные уведомления завербованы в транзакции. Например, подключение к одному соединению не приводит к продвижению транзакции. Однако всякий раз, когда вы открываете второе соединение с базой данных, заставляющей базу данных заходить на сайт, инфраструктура System.Transactions обнаруживает, что она является вторым долговременным ресурсом в транзакции и увеличивает ее до транзакции MSDTC.

Это, скорее всего, то, что происходит в вашем случае.