sql >> Database >  >> RDS >> Sqlserver

SqlConnection en promotie naar MSDTC vermijden

Het verbaast me enigszins dat je dit ziet, omdat de RequiresNew moeten betekent dat het geïsoleerd is van de andere transactie; meestal betekent dit bericht dat er 2 verbindingen zijn geactiveerd binnen een transactiebereik - weet u het zeker er is geen andere code die een verbinding maakt / opent binnen dat blok?

Uw voorgestelde oplossing zou moeten werken - hoewel in sommige opzichten TransactionScopeOption.Suppress kan handiger zijn dan het wijzigen van uw configuratie (maar beide zouden moeten werken). Er is echter een probleem:ADO.NET-transacties moeten worden doorgegeven aan de afzonderlijke opdrachten, dus u zou (ook de code een beetje opruimen):

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

waar CommitChanges accepteert een transactie - misschien met behulp van optionele parameters:

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

Uw naamgeving van DapperFactory suggereert dat je "dapper" gebruikt - in dat geval kun je dat gewoon doorgeven aan "dapper", of het null is of niet, d.w.z.

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


  1. Gegevenstype van SUM-resultaat in MySQL

  2. Hoe een module aan Wildfly toe te voegen met behulp van CLI

  3. Hoe PostgreSQL op DigitalOcean te implementeren

  4. Zoek tekstpositie, extraheer tekst en voeg in nieuwe kolom in MySQL