C# System.Transactions против TransactionScope - PullRequest
0 голосов
/ 13 января 2020

На основании этой статьи здесь , а также вопрос: Разница между транзакцией и TransactionScope мы знаем, что TransactionScope

Класс TransactionScope обеспечивает простой способ пометить блок кода как участие в транзакции, не требуя взаимодействия с самой транзакцией. Объем транзакции может автоматически выбирать и управлять внешней транзакцией. Из-за простоты использования и эффективности рекомендуется использовать класс TransactionScope при разработке приложения транзакции.

Принимая во внимание, что System.Transactions.Transaction

Класс Transaction содержит методы, используемые разработчиками, реализующими менеджеры ресурсов для зачисления. Он также предоставляет функции для клонирования транзакции и управления текущим контекстом транзакции.

Вопрос здесь в том, есть ли способ выбрать, какой из двух использовать. Очевидный ответ заключается в использовании неявных транзакций, если у вас нет причин использовать явные, но какова будет эта причина?

Существуют ли явные транзакции только для поддержки устаревших реализаций?

1 Ответ

0 голосов
/ 03 марта 2020

Просматривая различные ресурсы, я наткнулся на следующее, что частично отвечает на мой вопрос: Работа с транзакциями в EF 6

На основе этой документации (которая в основном основана на EF, но с ограничениями) похоже, применимо в любом случае):

Все еще существуют некоторые ограничения для подхода TransactionScope :

Требуется. NET 4.5.1 или более для работы с асинхронные методы.

  • Его нельзя использовать в облачном сценарии ios, если вы не уверены, что у вас одно и только одно соединение (облачный сценарий ios не поддерживает распределенные транзакции).
  • Его нельзя комбинировать с подходом Database.UseTransaction () из предыдущих разделов.
  • Он будет выдавать исключения, если вы выдадите какой-либо DDL и не включите распределенные транзакции через службу MSDT C.

Преимущества подхода TransactionScope:

  • Он автоматически обновит локальную транзакцию к распределенной транзакции, если вы делаете более одного подключения к определенной базе данных или объединяете подключение к одной базе данных с подключением к другой базе данных в рамках одной транзакции (примечание: у вас должна быть настроена служба MSDT C, разрешающая распределенные транзакции чтобы это работало).
  • Простота кодирования. Если вы предпочитаете, чтобы транзакция была фоновой и выполнялась неявно в фоновом режиме, а не явно под вашим контролем, то подход TransactionScope может вам подойти лучше.

Поскольку первая статья больше не является поддерживается и статья EF 6 новее + комментарий @MarcGravell, я предполагаю, что решение сводится к преимуществам и недостаткам статьи EF 6 выше.

...