Estou um pouco surpreso que você esteja vendo isso, porque o
RequiresNew
deveria significa que está isolada da outra transação; geralmente, esta mensagem significa que 2 conexões foram ativadas dentro de um escopo de transação - você certeza não existe outro código criando/abrindo uma conexão dentro desse bloco? Sua solução proposta deve funcionar - embora em alguns aspectos
TransactionScopeOption.Suppress
pode ser mais conveniente do que alterar sua configuração (mas ambos devem funcionar). No entanto, há um problema:as transações ADO.NET devem ser passadas para os comandos individuais, então você precisaria (também arrumando um pouco o código):using(var transaction = conn.BeginTransaction()) {
try {
var count = _changeTracker.CommitChanges(conn, transaction);
transaction.Commit();
return count;
} catch {
transaction.Rollback();
throw;
}
}
onde
CommitChanges
aceita uma transação - talvez usando parâmetros opcionais:int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }
Seu nome de
DapperFactory
sugere que você está usando "dapper" - nesse caso, você pode simplesmente passar isso para "dapper", seja nulo ou não, ou seja, conn.Execute(sql, args, transaction: transaction);