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