これを実際に達成するには、テーブルに対して手動でロックステートメントを発行する必要がありました。これは完了を行います テーブルロックですのでご注意ください!私の場合、複数のプロセスが同時に接触することを望まないキューを作成するのに役立ちました。
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
/待つコード> コードでは、トランザクションを別の方法で処理する必要があります。いくつかの変換の後、これは私たちにとってクラッシュしていました。
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();
}