Какая транзакция лучше с Dapper: BEGIN TRAN или TransactionScope?
Я только начал использовать Dapper, и мне было интересно, какой шаблон для транзакций будет лучше.
Когда я пишу SQL, я предпочитаю использовать транзакцию уже в скрипте с:
BEGIN TRAN
-- insert, update etc.
COMMIT
потому что это проще проверить, но есть также вопрос транзакции с dapper dot net, где используются.net транзакции, так что теперь я не уверен, какой из них мне следует использовать.
Есть ли у одного метода какие-либо недостатки / преимущества по сравнению с другим?
1 ответ
На самом деле, это не имеет ничего общего с Dapper. Послать этот ответ.
TransactionScope
или же connection.BeginTransaction
или решение "Транзакция в хранимой процедуре" выходит за рамки Dapper. Dapper просто выставляет несколько методов расширения DBConnection
Объект ADO.NET отображает вывод запросов на объект. Отдых зависит от вас.
TransactionScope
обычно используется для распределенных транзакций; транзакции, охватывающие разные базы данных, могут находиться в разных системах. Для этого нужны некоторые конфигурации в операционной системе и SQL Server, без которых это не будет работать. Это не рекомендуется, если все ваши запросы относятся к одному экземпляру базы данных.
Как отметил @ImrePühvel в комментариях: с одной базой данных это может быть полезно, когда вам нужно включить код в транзакцию, которая не находится под вашим контролем. С единой базой данных она также не требует специальных настроек.connection.BeginTransaction
является синтаксисом ADO.NET для реализации транзакции (в C#, VB.NET и т. д.) для одной базы данных. Это не работает в нескольких базах данных."Транзакция в хранимой процедуре" реализована для одной базы данных в хранимой процедуре, а не в коде приложения.
Вложенные транзакции или комбинация вышеперечисленных типов - еще одна тема для обсуждения; попробуйте поискать сеть для этого.
Мое личное мнение - использовать UnitOfWork для лучшей обработки транзакций. Я уже упоминал подробности в ссылке выше. Оно использует connection.BeginTransaction
внутренне.