Je suis quelque peu surpris que vous voyiez cela, car le RequiresNew
devrait signifier qu'il est isolé de l'autre transaction ; généralement, ce message signifie que 2 connexions ont été activées dans une portée de transaction - êtes-vous sûr il n'y a pas d'autre code créant/ouvrant une connexion à l'intérieur de ce bloc ?
Votre solution proposée devrait fonctionner - bien que d'une certaine manière TransactionScopeOption.Suppress
peut être plus pratique que de changer votre configuration (mais l'un ou l'autre devrait fonctionner). Cependant, il y a un problème :les transactions ADO.NET doivent être transmises aux commandes individuelles, vous auriez donc besoin (également en rangeant un peu le code) :
using(var transaction = conn.BeginTransaction()) {
try {
var count = _changeTracker.CommitChanges(conn, transaction);
transaction.Commit();
return count;
} catch {
transaction.Rollback();
throw;
}
}
où CommitChanges
accepte une transaction - peut-être en utilisant des paramètres facultatifs :
int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }
Votre nom de DapperFactory
suggère que vous utilisez "dapper" - auquel cas, vous pouvez simplement le passer dans "dapper", qu'il soit nul ou non, c'est-à-dire
conn.Execute(sql, args, transaction: transaction);