sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan jag låsa en tabell vid läsning med hjälp av Entity Framework?

Jag kunde bara verkligen åstadkomma detta genom att manuellt utfärda ett låsmeddelande till en tabell. Detta gör en fullständig bordslås, så var försiktig med det! I mitt fall var det användbart för att skapa en kö som jag inte ville att flera processer rörde samtidigt.

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

Uppdatera - I Entity Framework 6, speciellt med async / await kod måste du hantera transaktionerna annorlunda. Det här kraschade för oss efter några konverteringar.

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. Hur man förstår SQL Server Geografi Data Type

  2. Hur man upptäcker och förhindrar oväntad tillväxt av SQL Server-databasen TempDB

  3. PostgreSQL IN-operator med underfrågan dålig prestanda

  4. Kan inte ansluta till den lokala MySQL-servern via sockeln '/var/lib/mysql/mysql.sock' (2)