MSDTC большое маленькое животное, но может быть весьма коварны.
Прежде всего, я рекомендую, если вы знаете, что никогда не хотите быть частью распределенной транзакции, вы отключите его на своих серверах разработки. Вы не хотите автоматически рекламировать распределенную транзакцию в DEV только для того, чтобы узнать, что она убивает вашу реальную производительность или не работает на производстве.
Это, как говорится, ответ в том, что ORMs как NHibernate нет, но это вполне возможно, чтобы получить MSDTC, если принимать один из этих условий:
- Вы запрашивая вид/таблицы внутри транзакция, связанная с другим сервером.
- Вы используете два SqlConnections (или что-то такое, что использует NHibernate) в пределах одного TransactionScope
- Вы забираете другой транзакционный компонент (например, MSMQ или транзакционную файловую систему) внутри TransactionScope.
Если выполнено какое-либо из этих условий (конечно, есть некоторые другие, о которых я забыл), ваши транзакции будут автоматически рекламироваться в распределенной транзакции, и MSDTC обязательно будет задействован. Это означает, что MSDTC не только должен работать и настраиваться для вашего окна, он должен быть настроен для всех ящиков, которые хотят участвовать в вашей транзакции. В простом сценарии SQL Serve это означает, что ваш сервер приложений и ваш SQL Server должны быть запущены и настроены для распределенных транзакций.
Я не знаком с NServiceBus, но я бы подумал, что у него будут все виды функциональных возможностей, которые будут транслировать сообщения, например, в очередь.
Просто чтобы дополнить это сообщение, если кто-то ищет информацию по этому вопросу: NServiceBus имеет профиль InstallDtc, который можно использовать для автоматической настройки системы по мере необходимости. Может быть удобно для развертывания. –