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);