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

Hoàn nguyên giao dịch Entity Framework 6

Bạn không cần gọi Rollback theo cách thủ công vì bạn đang sử dụng using tuyên bố.

DbContextTransaction.Dispose phương thức sẽ được gọi ở cuối using khối. Và nó sẽ tự động khôi phục giao dịch nếu giao dịch không được cam kết thành công (không được gọi hoặc gặp trường hợp ngoại lệ). Sau đây là mã nguồn của SqlInternalTransaction.Dispose phương thức (DbContextTransaction.Dispose cuối cùng sẽ ủy quyền cho nó khi sử dụng trình cung cấp SqlServer):

private void Dispose(bool disposing)
{
    // ...
    if (disposing && this._innerConnection != null)
    {
        this._disposing = true;
        this.Rollback();
    }
}

Bạn thấy đấy, nó sẽ kiểm tra xem _innerConnection không rỗng, nếu không, hãy khôi phục giao dịch (nếu được cam kết, _innerConnection sẽ là null). Hãy xem Commit gì hiện:

internal void Commit() 
{
    // Ignore many details here...

    this._innerConnection.ExecuteTransaction(...);

    if (!this.IsZombied && !this._innerConnection.IsYukonOrNewer)
    {
        // Zombie() method will set _innerConnection to null
        this.Zombie();
    }
    else
    {
        this.ZombieParent();
    }

    // Ignore many details here...
}

internal void Zombie()
{
    this.ZombieParent();

    SqlInternalConnection innerConnection = this._innerConnection;

    // Set the _innerConnection to null
    this._innerConnection = null;

    if (innerConnection != null)
    {
        innerConnection.DisconnectTransaction(this);
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để có được sự khác biệt giữa hai hàng cho một trường cột?

  2. Tại sao chúng ta luôn thích sử dụng các tham số trong các câu lệnh SQL?

  3. Nhà cung cấp có tên là nhà cung cấp đường ống lỗi 40 không thể mở kết nối đến SQL Server lỗi 2

  4. Nhóm máy chủ SQL theo số ngày tháng mỗi giờ?

  5. Bỏ tất cả các bảng, thủ tục được lưu trữ, trình kích hoạt, ràng buộc và tất cả các phụ thuộc trong một câu lệnh sql