Почему TransactionScope использует распределенную транзакцию, когда я использую только LinqToSql и Ado.Net - PullRequest
3 голосов
/ 27 апреля 2010

У нас проблемы на одной машине, с сообщением об ошибке:

«MSDTC на сервере XXX недоступен.»

Код использует TransactionScope для переноса некоторого кода базы данных LingToSql; внутри транзакции также есть какой-то сырой Ado.net.

Поскольку осуществляется доступ только к одной базе данных sql (2005), почему вообще используется распределенная транзакция?

(я не хочу знать, как включить MSDTC, так как код должен работать на сервере с их текущей настройкой)

1 Ответ

7 голосов
/ 27 апреля 2010

Это почти всегда происходит, когда ваша транзакция использует более одного подключения к базе данных. Итак, допустим, вы обновляете две таблицы. Вы можете обновить первую таблицу, используя одно соединение, но обновить вторую таблицу, используя другое второе соединение. Это приведет к эскалации транзакции в MSDTC, даже с использованием объекта TransactionScope.

То, как мы обошли это, при выполнении транзакций мы используем один объект контекста базы данных для всех наших записей. Это устранило обострение. С тех пор у нас никогда не появлялось сообщение MSDTC.

Randy

...