Я думаю, что ваш тест в порядке, хотя вы должны убедиться, что вы получаете исключение DTC, а не какое-либо другое исключение.
Некоторые другие вещи, которые вы могли бы сделать:
Вы также можете запустить SQL Profiler и в разделе Отслеживание транзакций DTCTransaction.
С точки зрения кода, вы можете обработать событие DistributedTransactionStarted и зарегистрировать сообщение при запуске распределенной транзакции.
Или вы можете просто добавить сообщения журнала для регистрации System.Transactions.Transaction.Current.
TransactionInformation.DistributedIdentifier
до окончания транзакции. Если значение равно Guid.Empty {00000000-0000-0000-0000-000000000000}, то это не распределенная транзакция, в противном случае транзакция преобразуется в распределенную транзакцию.
Вы сказали, что используете SQL Server 2008. Какую версию .NET вы используете? Это 3,5? Если вы используете SQL Server 2008 и .NET 3.5 , то вы должны иметь возможность открывать несколько подключений (используя одну строку подключения) к одной и той же базе данных в одной транзакции, не переходя в распределенную транзакцию. Чтобы это работало, вам нужно закрыть первое соединение, прежде чем открывать второе.
Если окажется, что все условия выполнены, а транзакции все еще увеличиваются, я бы:
- дважды проверьте уровень совместимости с SQL Server
- проверить строку подключения, чтобы увидеть, отключено ли объединение в пул
- проверьте, что два соединения не открываются одновременно в одной транзакции
- выяснить, продвигаются ли все транзакции или только в определенных сценариях
ОБНОВЛЕНИЕ: Координатор распределенных транзакций (MSDTC) и FAQ по транзакциям объединяет большой список ресурсов MSDTC.