Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да заключа таблица при четене, използвайки Entity Framework?

Успях наистина да постигна това само чрез ръчно издаване на оператор за заключване на таблица. Това е пълно заключване на масата, така че внимавайте с него! В моя случай беше полезно за създаване на опашка, която не исках няколко процеса да се докосват наведнъж.

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

Актуализиране - В Entity Framework 6, особено с async / await код, трябва да обработвате транзакциите по различен начин. Това се срина за нас след някои преобразувания.

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. Премахнете числата от string sql сървъра

  2. Какво е правилното име за таблица за асоцииране (връзка много към много)

  3. Свързване на SQL Server към PostgreSQL

  4. Atomic UPSERT в SQL Server 2005

  5. Преобразувайте „datetime2“ в „smalldatetime“ в SQL Server (T-SQL примери)