sql >> Database teknologi >  >> RDS >> Sqlserver

SqlConnection og undgå forfremmelse til MSDTC

Jeg er noget overrasket over, at du ser dette, fordi RequiresNew skal betyder, at den er isoleret fra den anden transaktion; normalt betyder denne meddelelse, at 2 forbindelser er blevet aktiveret inden for et transaktionsområde - er du sikker er der ingen anden kode, der skaber/åbner en forbindelse inde i den blok?

Din foreslåede løsning burde virke - selvom på nogle måder TransactionScopeOption.Suppress kan være mere praktisk end at ændre din config (men begge burde virke). Der er dog et problem:ADO.NET-transaktioner skal videregives til de enkelte kommandoer, så du skal (også rydde lidt op i koden):

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

hvor CommitChanges accepterer en transaktion - måske ved at bruge valgfrie parametre:

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

Dit navn på DapperFactory foreslår, at du bruger "dapper" - i så fald kan du bare overføre det til "dapper", uanset om det er null eller ej, dvs.

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


  1. Hvor kan jeg finde listen over SQLException-fejlkoder til MySQL?

  2. Dvale Soft Slet ved hjælp af update Cascade

  3. hvordan man bruger cascade i oracle

  4. Er der en måde at installere java på Oracle 11g XE?