0

私は MVC 5 インターネット アプリケーションを開発していDbContextますcontroller

DbContextのクラスにはDbSet、さまざまなモデル エンティティのオブジェクトが多数あります。どのモデル エンティティも仮想オブジェクトを使用していませんが、ビュー モデルは各コントローラーで仮想オブジェクトを使用しています。

DbSetコントローラーが同じコントローラー/アクションの結果で異なるオブジェクトを参照する場合、DbContext異なる参照ごとに異なるインスタンスを使用する必要がありDbSetますか? 1 つのインスタンスDbSetsのみを使用してビュー モデルを作成するために別のクラスにアクセスしようとすると、Web サービス クラスで次のエラーが発生しました。DbContext

Message = "このコマンドに関連付けられた DataReader が既に開いているため、最初に閉じる必要があります。"

これは、同じクラス DbSetsを使用して異なるオブジェクトにアクセスするときに、MVC コントローラーのオブジェクトで CRUD 操作を行うときに発生する可能性がありますか?DbContext

次に例を示します。

MapLocationListオブジェクトを作成/編集するMapLocationListときに、次のさまざまなオブジェクトにアクセスするコントローラーDbSetがあります: AssetMapLocation.

MVC コントローラーで複数のDbContextインスタンスを使用すると、オーバーヘッドはどのくらい増加しますか?

基本的に、私の質問は、コントローラー/アクションの結果でDbContext異なるものにアクセスするときに、異なるインスタンスを使用する必要がありますか?DbSets

前もって感謝します。

4

1 に答える 1

0

異なる DBSet にアクセスするために、コントローラーで DBContext の異なるインスタンスを使用する必要はありません。(ベスト プラクティスは、1 つ以上の DBSet にアクセスする可能性がある要求の実行中に同じインスタンスを使用することです。これは、依存性注入またはその他の手段 (コントローラーが DBContext クラスのメンバー変数を持ち、それを破棄するなど) によって実現できます。コントローラーが破棄されたときにオンになります)。dbcontext インスタンスを適切に破棄している限り、コントローラーで同じインスタンスを複数回使用しても問題ありません。問題は、MultipleActiveResultSets (MARS) が有効になっていないことです。接続文字列に、次を挿入します

MultipleActiveResultSets=True

MARSの詳細はこちら

于 2014-12-15T06:10:49.200 に答える