Saya agak terkejut Anda melihat ini, karena RequiresNew
harus berarti terisolasi dari transaksi lain; biasanya, pesan ini berarti bahwa 2 koneksi telah diaktifkan di dalam lingkup transaksi - apakah Anda yakin tidak ada kode lain yang membuat / membuka koneksi di dalam blok itu?
Solusi yang Anda usulkan seharusnya berfungsi - meskipun dalam beberapa hal TransactionScopeOption.Suppress
mungkin lebih nyaman daripada mengubah konfigurasi Anda (tetapi keduanya harus berfungsi). Namun, ada masalah:transaksi ADO.NET harus diteruskan ke masing-masing perintah, jadi Anda perlu (juga sedikit merapikan kode):
using(var transaction = conn.BeginTransaction()) {
try {
var count = _changeTracker.CommitChanges(conn, transaction);
transaction.Commit();
return count;
} catch {
transaction.Rollback();
throw;
}
}
di mana CommitChanges
menerima transaksi - mungkin menggunakan parameter opsional:
int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }
Penamaan Anda untuk DapperFactory
menyarankan Anda menggunakan "dapper" - dalam hal ini, Anda bisa meneruskannya ke "dapper" apakah itu nol atau tidak, mis.
conn.Execute(sql, args, transaction: transaction);