MSDTC is a very small animal, but can be quite insidious.
First of all, I recommend that if you know that you never want to be part of a distributed transaction, you will disable it on your development servers. You do not want to automatically advertise a distributed transaction in DEV just to find out that it kills your real productivity or does not work in production.
Thus, the answer is that there is no ORM, such as NHibernate, but it is very possible to involve MSDTC if one of these conditions is met:
- You request a view / table within a transaction associated with another server.
- You are using two SqlConnections (or something that uses NHibernate) within the same TransactionScope
- In TransactionScope, you pick up another transactional component (for example, MSMQ or a transactional file system).
If any of these conditions is met (of course, there are some others that I forgot about), your transaction will automatically move to a distributed transaction, and MSDTC will be involved. This means that MSDTC not only needs to work and is configured for your window, it must be configured for all mailboxes that want to participate in your transaction. In a simple SQL Serve script, this means that your application server and your SQL Server must be running and configured for distributed transactions.
I am not familiar with NServiceBus, but I would have thought that it would have all kinds of functionality that would broadcast messages, for example, into a queue.
source share