私の最新のプロジェクトでは、アプリケーション全体でコンテキストを 1 つだけ持つ方が簡単かもしれないと考えました。複数のクエリを必要とするページを読み込むと、空の結果が返される場合があることに気付きました。
たとえば、予定のリストと営業担当者のリストがあります。彼らはうまく現れます。それから F5 を押します。すべてがうまくいくこともありますが、予約および/または担当者リストが空になることもあります。
これはシングル コンテキスト アプリの既知の問題ですか? そのデザインはダメですか?
私の最新のプロジェクトでは、アプリケーション全体でコンテキストを 1 つだけ持つ方が簡単かもしれないと考えました。複数のクエリを必要とするページを読み込むと、空の結果が返される場合があることに気付きました。
たとえば、予定のリストと営業担当者のリストがあります。彼らはうまく現れます。それから F5 を押します。すべてがうまくいくこともありますが、予約および/または担当者リストが空になることもあります。
これはシングル コンテキスト アプリの既知の問題ですか? そのデザインはダメですか?
これはシングル コンテキスト アプリの既知の問題ですか? そのデザインはダメですか?
はい、単純な Web アプリケーションでは違いがわからないかもしれませんが、多くのユーザーがいて高い同時実行が必要な複雑な Web アプリケーションでは、次のような問題が発生します。
DbContext
内部キャッシュを使用して Unit Of Work パターンを内部で実装しているため、グローバル DbContext を長時間保持すると、メモリ リークが発生し、データベースから大量のデータがプルされ、しばらくの間メモリ (内部キャッシュ) に保持されます。
Unit Of Work はビジネス トランザクションであり、Unit Of Work の内部キャッシュはこのトランザクション専用であり、グローバル用ではありません。トランザクションが完了した場合、Unit Of Work はできるだけ早く破棄する必要があります。
Web アプリケーションでの DbContext のベスト プラクティスは、リクエストごとに DbContext の有効期間を維持することです。IoC コンテナーを使用する場合、ほとんどの IoC コンテナーは要求ごとのライフタイム管理をサポートします。