sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu uzamknout tabulku při čtení pomocí Entity Framework?

Skutečně jsem toho dokázal dosáhnout pouze ručním zadáním příkazu zámku do tabulky. Tím je dokončeno zámek stolu, tak s ním opatrně! V mém případě to bylo užitečné pro vytvoření fronty, které jsem nechtěl, aby se dotýkalo více procesů najednou.

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

Aktualizovat - V Entity Framework 6, zejména s async / await kód, musíte s transakcemi zacházet jinak. Po několika konverzích se nám to zhroutilo.

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. Jak zřetězit řetězce v MySQL pomocí CONCAT()

  2. Vygenerujte sadu nebo sekvenci bez smyček – část 3

  3. Příklady DAY() – MySQL

  4. Přehled různých metod skenování v PostgreSQL