Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SqlConnection và tránh quảng cáo cho MSDTC

Tôi hơi ngạc nhiên khi bạn nhìn thấy điều này, bởi vì RequiresNew nên có nghĩa là nó được cách ly với giao dịch khác; thông thường, thông báo này có nghĩa là 2 kết nối đã được kích hoạt bên trong một phạm vi giao dịch - bạn có chắc chắn không không có mã nào khác tạo / mở kết nối bên trong khối đó?

Giải pháp được đề xuất của bạn sẽ hoạt động - mặc dù theo một số cách TransactionScopeOption.Suppress có thể thuận tiện hơn việc thay đổi cấu hình của bạn (nhưng một trong hai cách này sẽ hoạt động). Tuy nhiên, có một vấn đề:các giao dịch ADO.NET phải được chuyển cho các lệnh riêng lẻ, vì vậy bạn sẽ cần (cũng thu gọn mã một chút):

using(var transaction = conn.BeginTransaction()) {
    try {
        var count = _changeTracker.CommitChanges(conn, transaction);
        transaction.Commit();
        return count;
    } catch {
        transaction.Rollback();
        throw;
    }
}

nơi CommitChanges chấp nhận một giao dịch - có thể sử dụng các tham số tùy chọn:

int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }

Việc bạn đặt tên cho DapperFactory gợi ý rằng bạn đang sử dụng "dapper" - trong trường hợp đó, bạn chỉ có thể chuyển nó vào "dapper" cho dù nó là null hay không, tức là

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. Tên cột biến SQL Server?

  2. Trường hợp Khi giá trị khác biệt thì tính tổng giá trị khác?

  3. T-SQL Stored Procedure Execution có phải là 'nguyên tử' không?

  4. Cách định dạng ngày giờ trong SQL SERVER

  5. làm thế nào để biết có bao nhiêu hàng sẽ bị ảnh hưởng trước khi chạy một truy vấn trong microsoft sql server 2008