Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SqlConnection и избягване на повишаване в MSDTC

Донякъде съм изненадан, че виждате това, защото RequiresNew трябва означава, че е изолиран от другата транзакция; обикновено това съобщение означава, че 2 връзки са активирани в обхвата на транзакция - сигурни ли сте няма друг код, създаващ/отварящ връзка вътре в този блок?

Предложеното от вас решение трябва да работи - въпреки че по някакъв начин TransactionScopeOption.Suppress може да е по-удобно от промяната на конфигурацията ви (но и двете трябва да работят). Има обаче проблем:ADO.NET транзакциите трябва да бъдат предадени на отделните команди, така че ще ви трябва (също малко подреждане на кода):

using(var transaction = conn.BeginTransaction()) {
    try {
        var count = _changeTracker.CommitChanges(conn, transaction);
        transaction.Commit();
        return count;
    } catch {
        transaction.Rollback();
        throw;
    }
}

където CommitChanges приема транзакция - може би използвайки незадължителни параметри:

int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }

Вашето име на DapperFactory предполага, че използвате "dapper" - в този случай можете просто да го прехвърлите в "dapper", независимо дали е null или не, т.е.

conn.Execute(sql, args, transaction: transaction);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на TransactionScope с read uncommitted - необходимо ли е с (nolock) в SQL?

  2. Брой дни от седмицата в даден месец

  3. Вмъкване във временна таблица от съхранена процедура, която връща множество набори от резултати

  4. Как да конвертирате текстова колона в datetime в SQL

  5. Как да изпълним sp_send_dbmail, като ограничим разрешенията