#c# #dapper
#c# #dapper
Вопрос:
Просто просматриваю это руководство: https://www.davepaquette.com/archive/2019/02/06/managing-transactions-in-dapper.aspx
Насколько я понимаю (без Dapper), как только у вас есть соединение, вы можете открыть транзакцию, затем выполнить кучу операторов, а затем либо зафиксировать, либо откатить транзакцию. Этим запросам не нужно ссылаться на транзакцию, потому что соединение уже «знает» об этом.
Итак, почему Dapper нужна транзакция каждый раз, когда выполняется какое-либо действие?
Комментарии:
1. Вы можете использовать явные транзакции, и это один из подходов. Использование неявных транзакций
TransactionScope
также работает иDapper
не требует в этом ничего особенного. learn.microsoft.com/en-us/dotnet/framework/data/transactions /…2. @Dusan окружающие транзакции имеют «удобство» в столбце «плюс», но вносят ряд рисков и проблем в столбец «минус». Лично я бы с трудом рекомендовал их
Ответ №1:
Dapper ничего не меняет в фундаментальном ADO.NET модель, поэтому, если ваша операция внутри транзакции завершается неудачей, если вы явно не передаете транзакцию Dapper, то это ADO.NET вещь, и та же самая операция завершилась бы точно так же без Dapper. Все, что делает Dapper, это устанавливает Transaction
свойство в команде.
Или, другими словами: я считаю, что ваше понимание здесь неверно. Я согласен с вами в том, что ваше понимание и ожидания разумны, и я не знаю ни одной веской причины, по которой команде вообще нужно знать о транзакции, что в конечном итоге связано с подключением. Но: я не устанавливаю правила :/
Обратите внимание, что можно использовать шаблон «декоратор» в ADO.NET (например, мини-профилировщик делает это), поэтому теоретически можно было бы создать оболочку соединения, которая отслеживает транзакцию для вас, и заставить команду извлекать транзакцию и автоматически присоединять ее при выполнении операций. Вероятно, это не составит большого труда, если вы начнете с базового типа mini-profiler.
Комментарии:
1. Ха-ха. Да, мое понимание было неверным. Полезно знать, что команда должна знать о транзакции. Я согласен, что это кажется странным.
2. @ChechyLevas Я добавил последний бит внизу, который может быть полезен