sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg låse en tabel ved læsning ved hjælp af Entity Framework?

Jeg var kun i stand til virkelig at opnå dette ved manuelt at udstede en låseerklæring til en tabel. Dette gør en fuldstændig bordlås, så vær forsigtig med den! I mit tilfælde var det nyttigt til at oprette en kø, som jeg ikke ønskede, at flere processer rørte på én gang.

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

Opdater - I Entity Framework 6, især med async / await kode, skal du håndtere transaktionerne anderledes. Dette gik ned for os efter nogle konverteringer.

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. MariaDB dato- og tidsenheder

  2. Tilføj en databasemailkonto til en profil (T-SQL)

  3. hvordan du gør dine data vandrette

  4. Antag en menneskelig tilgang til dataforvaltning