Донякъде съм изненадан, че виждате това, защото RequiresNew
трябва означава, че е изолиран от другата транзакция; обикновено това съобщение означава, че 2 връзки са активирани в обхвата на транзакция - сигурни ли сте няма друг код, създаващ/отварящ връзка вътре в този блок?
Предложеното от вас решение трябва да работи - въпреки че по някакъв начин TransactionScopeOption.Suppress
може да е по-удобно от промяната на конфигурацията ви (но и двете трябва да работят). Има обаче проблем:ADO.NET транзакциите трябва да бъдат предадени на отделните команди, така че ще ви трябва (също малко подреждане на кода):
using(var transaction = conn.BeginTransaction()) {
try {
var count = _changeTracker.CommitChanges(conn, transaction);
transaction.Commit();
return count;
} catch {
transaction.Rollback();
throw;
}
}
където CommitChanges
приема транзакция - може би използвайки незадължителни параметри:
int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }
Вашето име на DapperFactory
предполага, че използвате "dapper" - в този случай можете просто да го прехвърлите в "dapper", независимо дали е null или не, т.е.
conn.Execute(sql, args, transaction: transaction);