0

ファイルから入力された製品のテーブルがあります。ファイルが更新されたら、テーブル内のすべての行を新しいデータに置き換える必要があります。

これを行う簡単な方法は、既存の行をすべて削除してから、新しい行を挿入することです。ただし、1 つのトランザクションが挿入と同時に行を読み取っている場合、トランザクションは両方のセットから行を読み取ってしまう可能性があることを懸念しています。

では、どうすればこれを止めることができますか?SERIALIZABLE トランザクションを使用すると、この状況でデッドロックが発生する可能性があると考えられます。

4

2 に答える 2

0

これはどう...

using (var transaction = new TransactionScope())
{
   Context.Database.ExecuteSqlCommand("DELETE Items WITH (TABLOCKX)");

   SqlBulkCopyHelper.BulkInsert(Context.Database.Connection.ConnectionString, "Items", items);
}

ここで、「Context」は、ここから取得した Entity Framework DbContext と SqlBulkCopyHelperです。

TransactionScope はデフォルトで SERIALIZABLE に設定されているため、その間テーブル ロックが保持されると思います。

于 2013-09-09T13:42:23.527 に答える