Я использую System.Transactions.TransactionScope()
в модульном тесте, чтобы вставить запись, попытаться прочитать ее и разрешить откат области транзакции, чтобы не оставлять следов в базе данных.
1 var rep = new RunRepository();
2 using (var scop = new TransactionScope())
3 {
4 var runId = rep.SaveSwrsRun([Run data elements]); // returns PK RunId
5 var run = rep.FetchSwrsRun(runId); // returns an object of type Run
6 Assert.IsNotNull(run);
7 }
Строка 5 выдает исключение с сообщением об ошибке
System.Transactions.TransactionManagerCommunicationException: доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Включите DTC для доступа к сети в конфигурации безопасности для MSDTC с помощью инструмента администрирования служб компонентов.
Я проверил инструмент администрирования служб компонентов, и на моей рабочей станции есть включен DTC. Я также обнаружил этот поток MSDTC Transaction scope, который направляет меня на Как включить доступ к сети DTC
Но когда я проверил SQL-сервер, флажок удаленного доступа уже был установлен. У кого-нибудь еще есть другие идеи?
Подробнее ... Когда я заставляю Репозиторий удерживать одно и то же соединение и не возвращаться в пул для другого для второго оператора Sql, он работает. По-видимому, использование другого соединения для второго состояния sql запускает DTC для эскалации транзакции в «распределенный режим» (чего не должно быть, поскольку оба оператора sql находятся на одном сервере и используют одну и ту же строку подключения), а не упомянуть, что даже если это так, этот (распределенный режим) все равно должен работать.