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 /待つ コードでは、トランザクションを別の方法で処理する必要があります。いくつかの変換の後、これは私たちにとってクラッシュしていました。

    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. JavaセキュリティAPIの概要

    2. 従業員のスケジュールをデータベースに保存する方法

    3. SQLServer更新データベース統計

    4. Oracleで文字列の日付を日時に変換する