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