Jsem poněkud překvapen, že to vidíte, protože RequiresNew
měl by znamená, že je izolován od jiné transakce; tato zpráva obvykle znamená, že v rámci transakčního rozsahu byla aktivována 2 připojení - jste si jisti? není v tomto bloku žádný jiný kód vytvářející/otevírající spojení?
Vámi navrhované řešení by mělo fungovat – i když v některých ohledech TransactionScopeOption.Suppress
může být pohodlnější než změna konfigurace (ale obojí by mělo fungovat). Je tu však problém:transakce ADO.NET musí být předány jednotlivým příkazům, takže byste potřebovali (také trochu uklidit kód):
using(var transaction = conn.BeginTransaction()) {
try {
var count = _changeTracker.CommitChanges(conn, transaction);
transaction.Commit();
return count;
} catch {
transaction.Rollback();
throw;
}
}
kde CommitChanges
přijímá transakci – možná pomocí volitelných parametrů:
int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }
Vaše jméno DapperFactory
naznačuje, že používáte "dapper" - v takovém případě to můžete jednoduše předat do "dapper", ať už je null nebo ne, tj.
conn.Execute(sql, args, transaction: transaction);