Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SqlConnection dan menghindari promosi ke MSDTC

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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Query yang berjalan dengan baik di SSMS berjalan sangat lambat di ASP.NET

  2. T-SQL:Bagaimana cara menggunakan parameter dalam SQL dinamis?

  3. Bagaimana Anda mengembalikan nama kolom dari sebuah tabel?

  4. Pembaruan atau penyisipan tampilan atau fungsi gagal karena berisi bidang turunan atau konstan

  5. Masalah kueri SQL