Я использую 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 * Поток 1014 *, который направляет меня к Как включить сетевой доступ по DTC
Но когда я установил SQL-сервер, флажок удаленного доступа былуже проверил.У кого-нибудь еще есть другие идеи?
Подробнее ... Когда я заставляю репозиторий удерживать то же соединение и не возвращаюсь в пул для другого для второго оператора Sql, это работает.По-видимому, использование другого соединения для второго SQL-отчета вызывает DTC для перевода транзакции в «распределенный режим» (чего не следует делать, поскольку оба SQL-оператора находятся на одном сервере и используют одну и ту же строку подключения), а неупомянуть, что даже если это произойдет, это (распределенный режим) все равно должно работать в любом случае.