Какие плюсы и минусы у TransactionScope? - PullRequest
6 голосов
/ 21 июня 2010

Какие плюсы и минусы у класса TransactionScope в C #?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 июня 2010

Некоторые преимущества от MSDN :

Преимущества TransactionScope

  • код внутри транзакции сфера не только транзакционная, это также является промоутером. Перевод начинается с LTM и System.Transaction будет продвигать его по мере необходимости, в зависимости от характера его взаимодействия с ресурсами или удаленные объекты.
  • Объем не зависит от объектная модель приложения - любая часть код может использовать TransactionScope и таким образом стать транзакционным. Есть нет необходимости в специальном базовом классе или атрибутов.
  • Нет необходимости привлекать ресурсы явно с транзакцией. любой Диспетчер ресурсов System.Transaction обнаружит внешнюю транзакцию созданный сферой и автоматически зачислять.
  • В целом, это просто и интуитивно понятно модель программирования даже для более сложные сценарии, которые включают поток транзакций и вложенность.
2 голосов
/ 21 июня 2010

Хорошая сторона:

Может выполнять транзакции вне контекста базы данных. Вставьте запись в БД. Записать файл на диск.

Плохая сторона:

Требуется доступ MSDTC на клиентском компьютере, где используется TransactionScope.

0 голосов
/ 20 августа 2011

Просто чтобы добавить / уточнить моменты, которые делает Incognito:

  • TransactionScopes упрощает реализацию транзакций ACID (т. Е. Вам не нужно писать явный "откат" или код очистки)
  • TransactionScope может координировать ресурсы, такие как базы данных, очереди сообщений и транзакционные файловые системы, в рамках транзакции
  • Re. TransactionScopes интуитивно понятны - такие ресурсы, как SQL и т. Д., Автоматически / легко обнаруживают внешнюю транзакцию и подключаются как доступные.

Единственная «плохая» сторона заключается в том, что вам нужно знать, что:

  • Уровень изоляции TransactionScope по умолчанию - READ SERIALIZABLE, который обычно слишком «сильный».и может вызвать блокировку и взаимоблокировку.Рекомендую использовать ReadCommitted для большинства транзакций.
  • TransactionScope преобразует транзакцию в DTC, если в TransactionScope используется более одной базы данных / более одного одновременного подключения / более одного ресурса (например, SQL и MSMQ).Но обычно в сценариях с однопоточной / единой базой данных можно избежать, закрыв соединения перед открытием нового (или оставив одно соединение открытым, что не рекомендуется).
...