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

Làm cách nào để khóa bảng khi đọc, sử dụng Entity Framework?

Tôi chỉ thực sự có thể thực hiện được điều này bằng cách đưa ra một câu lệnh khóa cho một bảng theo cách thủ công. Điều này thực hiện một hoàn thành khóa bàn, vì vậy hãy cẩn thận với nó! Trong trường hợp của tôi, nó rất hữu ích khi tạo một hàng đợi mà tôi không muốn nhiều quy trình chạm vào cùng một lúc.

using (Entities entities = new Entities())
using (TransactionScope scope = new TransactionScope())
{
    //Lock the table during this transaction
    entities.Database.ExecuteSqlCommand("SELECT TOP 1 KeyColumn FROM MyTable WITH (TABLOCKX, HOLDLOCK)");

    //Do your work with the locked table here...

    //Complete the scope here to commit, otherwise it will rollback
    //The table lock will be released after we exit the TransactionScope block
    scope.Complete();
}

Cập nhật - Trong Entity Framework 6, đặc biệt là với async / await mã, bạn cần phải xử lý các giao dịch khác nhau. Điều này đã xảy ra đối với chúng tôi sau một số chuyển đổi.

using (Entities entities = new Entities())
using (DbContextTransaction scope = entities.Database.BeginTransaction())
{
    //Lock the table during this transaction
    entities.Database.ExecuteSqlCommand("SELECT TOP 1 KeyColumn FROM MyTable WITH (TABLOCKX, HOLDLOCK)");

    //Do your work with the locked table here...

    //Complete the scope here to commit, otherwise it will rollback
    //The table lock will be released after we exit the TransactionScope block
    scope.Commit();
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo nhiều cái cho một cái

  2. Cách xóa công việc tác nhân máy chủ SQL trong Azure Data Studio

  3. Tách các giá trị được phân tách trong một cột SQL thành nhiều hàng

  4. Xác thực SQL Server so với xác thực Windows:Sử dụng cái nào và khi nào

  5. Tạo CHẾ ĐỘ XEM được tham số hóa trong SQL Server 2008