Я хотел бы запустить несколько операторов вставки в нескольких таблицах. Я использую dapper.net. Я не вижу способа обрабатывать транзакции с dapper.net.
Поделитесь своими идеями о том, как использовать транзакции с dapper.net.
c#
transactions
dapper
Амит
источник
источник
Dispose()
методом. ЕслиComplete()
не был вызван, транзакция откатывается.TransctionScope
блока using, если вы выберете этот ответ.Я предпочел использовать более интуитивный подход, получая транзакцию непосредственно из соединения:
источник
.BeginTransaction()
? Если бы это было так, этот метод расширения способствовал бы неправильному использованию транзакции. (IMO, он должен даже бросить «не удается открыть транзакцию после того, как соединение уже открыто».)Execute
, если это необходимо.Вы должны иметь возможность использовать,
TransactionScope
поскольку Dapper запускает только команды ADO.NET.источник
Учитывая, что все ваши таблицы находятся в единой базе данных, я не согласен с
TransactionScope
решением, предложенным в некоторых ответах здесь. Обратитесь к этому ответу.TransactionScope
обычно используется для распределенных транзакций; транзакции, охватывающие разные базы данных, могут находиться в разных системах. Это требует некоторых настроек операционной системы и SQL Server, без которых это не будет работать. Это не рекомендуется, если все ваши запросы относятся к одному экземпляру базы данных.Но с единой базой данных это может быть полезно, когда вам нужно включить код в транзакцию, которая не находится под вашим контролем. С единой базой данных тоже не требуется особых настроек.
connection.BeginTransaction
синтаксис ADO.NET для реализации транзакции (в C #, VB.NET и т. д.) с единой базой данных. Это не работает с несколькими базами данных.Итак,
connection.BeginTransaction()
лучший способ пойти.Даже лучший способ обработать транзакцию - реализовать UnitOfWork, как описано в этом ответе.
источник
TransactionScope
который неэффективен для того, что хочет OP. Я согласен, чтоTransactionScope
во многих случаях это хороший инструмент; но не это.Ответ Дэниела сработал для меня, как и ожидалось. Для полноты, вот фрагмент, который демонстрирует фиксацию и откат с использованием области транзакции и dapper:
источник
Dispose
метод вызывается первым или вторым, просто он вызывается дважды. Что касается того, что «повторный вызов утилиты не вреден», это большое предположение. Я узнал, что документы и фактические реализации часто не совпадают. Но если вам нужны слова Microsoft: msdn.microsoft.com/en-us/library/…