1

定期的かつ同時に受信するデータに基づいて、テーブルに新しい行を挿入するか、同じテーブルの既存の行を更新する操作を実行しています。行を挿入するか更新するかは、既存の行の状態に依存します。したがって、この操作の結果は、この操作の以前の実行の影響を受け、その後の実行に影響します。トランザクションやロックなどを使用して原子性/分離を確保する必要があります。Entity Framework には非常に多くのオプションと警告があるようです (そして、私は一般的にデータベース関連の完全な初心者でもあります)、どの方向に向かうべきかわかりません。TransactionScope、BeginTransaction、アンビエント取引?Serializable または RepeatableRead? SaveChanges と AcceptAllChanges? 特別なことをする必要さえありますか?新しい行を追加できるという事実は、特にファントム行について心配しますが、それが何を意味するのかほとんどわかりません。この件に関するガイダンスは大歓迎です。

4

1 に答える 1

1

このチュートリアルはあなたに役立つかもしれません-http ://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an- asp-net-mvc-application

引用:

悲観的な並行性(ロック)

アプリケーションが同時実行シナリオでの偶発的なデータ損失を防ぐ必要がある場合、それを行う1つの方法は、データベースロックを使用することです。これは悲観的並行性と呼ばれます。たとえば、データベースから行を読み取る前に、読み取り専用または更新アクセスのロックを要求します。更新アクセスのために行をロックすると、他のユーザーは、変更中のデータのコピーを取得するため、読み取り専用または更新アクセスのいずれかのために行をロックすることはできません。行を読み取り専用アクセス用にロックすると、他のユーザーも読み取り専用アクセス用にロックできますが、更新用にはロックできません。ロックの管理にはいくつかの欠点があります。プログラムは複雑になる可能性があります。これには大量のデータベース管理リソースが必要であり、アプリケーションのユーザー数が増えると(つまり、拡張性が低くなると)パフォーマンスの問題が発生する可能性があります。これらの理由により、すべてのデータベース管理システムが悲観的な並行性をサポートしているわけではありません。Entity Frameworkは、組み込みのサポートを提供していません。このチュートリアルでは、EntityFrameworkの実装方法については説明していません。

楽観的並行性

悲観的並行性の代替手段は、楽観的並行性です。楽観的同時実行性とは、同時実行性の競合が発生することを許可し、発生した場合は適切に対応することを意味します。たとえば、JohnはDepartments Editページを実行し、英語部門の予算額を$350,000.00から$100,000.00に変更します。(ジョンは競合する部門を管理しており、自分の部門のためにお金を解放したいと考えています。)*

チュートリアルには、両方のモデルのコード例があります。

于 2013-01-14T03:08:35.460 に答える