Dapper и TransactionScope?

Я только начал экспериментировать с Dapper. Пока мне это нравится. Dapper не работает с TransactionScope? Я заметил, что даже если я никогда не вызываю TransactionScope.Complete, мои изменения все равно сохраняются в базе данных. Если TransactionScope не поддерживается сейчас, есть ли планы по его поддержке в будущем? Если нет, то вам нужно использовать традиционное управление транзакциями (System.Transactions.Transaction)?

Обновление: я только что разговаривал с Сэмом через Твиттер. Он должен работать. Я обновлю его завтра утром (на работе) с подробностями, чтобы посмотреть, сможет ли кто-нибудь понять, почему мои изменения все еще фиксируются в базе данных, даже когда я никогда не называл завершенными.


person coding4fun    schedule 28.07.2011    source источник


Ответы (1)


Это была полностью моя вина и я не полностью понимал объем транзакций. Соединение не включается автоматически в область транзакций, если вы не открываете соединение в области транзакции:

Автоматическое зачисление

  using (var scope = new TransactionScope())
      {
        con.Open();                                
         //update/delete/insert commands here
      }

Включение вручную

    con.Open();
    using (var scope = new TransactionScope())
    {
       con.EnlistTransaction(Transaction.Current);  
       //update/delte/insert statements here
    }

Подробности можно найти здесь: Подробности

person coding4fun    schedule 29.07.2011
comment
В автоматическом режиме я получаю сообщение «Регистрация в транзакциях Ambient не поддерживается». - person Ian Warburton; 04.10.2017
comment
... может быть основной проблемой .net. - person Ian Warburton; 04.10.2017
comment
@IanWarburtoni, наверное, так и есть. См. Здесь: github.com/dotnet/corefx/issues/23927 - person coding4fun; 05.10.2017
comment
Разве вы не должны вызывать scope.Complete ()? stackoverflow.com/a/53698092/3606250 - person drizin; 25.10.2020
comment
@drizin да, но это всего лишь небольшой фрагмент кода, а не полный пример. - person coding4fun; 05.01.2021
comment
@ coding4fun Спасибо. Тем не менее, я предлагаю добавить scope.Complete() в фрагмент, поскольку это фундаментальная часть шаблона использования TransactionScope, и другие разработчики могут скопировать ваш фрагмент без этой необходимой части. - person drizin; 06.01.2021