1

多くのモデルでサイトを作ろうと努力しています。個別のコンテキストを用意する必要がありますか、それとも1つだけにする必要がありますか?Add-MigrationとUpdate-Databaseが実際に機能するように、作成した包括的なコンテキストにすべてのDbsetを既に配置しました。(1つのコンテキストしか処理できないため)。

強く型付けされた各コントローラーには、関連するモデルコンテキストのインスタンスがあることに気づきました。ここで、ページのライフサイクルに対して1つのオープンコンテキスト(私のアンブレラスーパークラスコンテキスト)を永続的に開く必要があるかどうか疑問に思っています。コンテキストの新しいインスタンスを作成し、それらを(ローカルメソッド内で)常に破棄するのは非効率的すぎるようです。これについて推奨される方法は何ですか?

4

1 に答える 1

1

1つのコンテキストで多くのエンティティを追跡することをお勧めします。同じコンテキストですべてのエンティティを追跡できるため、結合クエリを使用して外部キー関係を持つエンティティを更新する場合に役立ちます。また、流暢なAPIを使用して、DBContextメソッド「OnModelCreating」でエンティティを構成することもできます。コンテキストにすべてが含まれていない場合、エンティティの関係を構成することは困難になります。異なるコンテキストでエンティティをグループ化すると、最終的にコードのメンテナンスに影響します。モデルをクリーンで将来にわたって利用できるようにエンティティを構成するための流暢なAPIの方法が好きです。

DBContextには、オーバーライドできるDisposeメソッドがあります。私たちはそれをより有効に活用することができます。DBContextに加えて、データベースコンテキストをどこから呼び出すかを作成しますが、これはまったく問題ありません。それが私たちが望んでいることですよね?着信要求は、DBContext(データベースコンテキスト)を作成し、データベースにクエリを実行し、モデルをフェッチしてからビューにデータを入力するスレッドとして送信され、ユーザーに返されます。

重要なことは、DBContextの「using」ステートメントを使用することです。これは、スコープがusing中括弧から外れた後、コンテキストを即座に破棄します。これを行うと、リクエストのライフサイクルを通じてコン​​テキストが生きるのに問題はありません。

using (MyDbContext dbCtx = new MyDbContext())
 {
     //fetch the model
 } 
//here the context is disposed.
于 2012-08-09T04:29:24.610 に答える