Просто чтобы добавить / уточнить моменты, которые делает Incognito:
- TransactionScopes упрощает реализацию транзакций ACID (т. Е. Вам не нужно писать явный "откат" или код очистки)
- TransactionScope может координировать ресурсы, такие как базы данных, очереди сообщений и транзакционные файловые системы, в рамках транзакции
- Re. TransactionScopes интуитивно понятны - такие ресурсы, как SQL и т. Д., Автоматически / легко обнаруживают внешнюю транзакцию и подключаются как доступные.
Единственная «плохая» сторона заключается в том, что вам нужно знать, что:
- Уровень изоляции TransactionScope по умолчанию - READ SERIALIZABLE, который обычно слишком «сильный».и может вызвать блокировку и взаимоблокировку.Рекомендую использовать ReadCommitted для большинства транзакций.
- TransactionScope преобразует транзакцию в DTC, если в TransactionScope используется более одной базы данных / более одного одновременного подключения / более одного ресурса (например, SQL и MSMQ).Но обычно в сценариях с однопоточной / единой базой данных можно избежать, закрыв соединения перед открытием нового (или оставив одно соединение открытым, что не рекомендуется).