2

並行性と Entity Framework 4.0 でいくつかのテストを行っています。私は2人のユーザーで次のことをしています:

ユーザー 1 がレジスタをロードします。
ユーザー 2 がレジスタをロードします。
ユーザー 2 は、1 つのレジスターを削除します。
ユーザー 1 は、クライアント 2 によって削除された同じレジスターを削除しようとします。

私が使用するコードは次のとおりです。

using(Context myContext = new Context))
{
Users myUser = new Users { IDUser = paramUser.IDUser };
myContext.Users.Attach(myUser);
myContext.Users.DeleteObject(myUser);
miContext.SaveChanges();
}

ユーザー 1 がレジスターを削除しようとすると、次の例外が発生します。 .

これが同時実行の問題であることはわかっていますが、EF のデフォルトの動作は常に変更を適用するという考えがあります。同時実行制御を設定すると、取得したデータと更新の間に変更があるかどうかを比較します。しかし、この場合、私のエンティティのすべてのプロパティは、同時実行モードが「固定」ではなく「なし」になっています。

これに直面する最善の方法は何ですか?多くの場合、並行性を制御したくないので、常に最後の変更のみを適用します。たとえば、ユーザーのテーブルがあり、フィールドは電話番号です。他のユーザーが私の要求と私の更新の間にレジスタを変更するかどうかに関係なく、更新しようとしている電話を常に設定したいと考えています。他のユーザーがデータを変更した場合は、自分の更新で上書きします。

この場合、問題は見られません。データベースに存在しないレジスタを削除しようとしています。レジスタがデータベースにないことが必要です。他のユーザーによって変更された情報を変更しようとすると、更新では問題が理解できましたが、削除操作では...

4

0 に答える 0