sql >> Databasteknik >  >> RDS >> Sqlserver

SqlConnection och undvika marknadsföring till MSDTC

Jag är något förvånad över att du ser detta, eftersom RequiresNew bör betyder att den är isolerad från den andra transaktionen; vanligtvis betyder det här meddelandet att två anslutningar har aktiverats inom ett transaktionsomfång - är du säker finns det ingen annan kod som skapar/öppnar en anslutning i det blocket?

Din föreslagna lösning borde fungera - även om det på vissa sätt är TransactionScopeOption.Suppress kan vara bekvämare än att ändra din konfiguration (men båda borde fungera). Det finns dock ett problem:ADO.NET-transaktioner måste skickas till de individuella kommandona, så du skulle behöva (också göra i ordning koden lite):

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

där CommitChanges accepterar en transaktion - kanske med valfria parametrar:

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

Ditt namn på DapperFactory föreslår att du använder "dapper" - i så fall kan du bara skicka det till "dapper" oavsett om det är null eller inte, dvs.

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


  1. importera mysql-data till kubernetes pod

  2. Bitvis verksamhet i Postgres

  3. java.math.BigInteger kan inte castas till java.lang.Integer

  4. Hur kan jag förhindra att Oracle SQL Developer stänger DB-anslutningen?