1

MVC4アプリケーションとNinject.MVC3でEF4.3を使用しています。コントローラは、-Repositoryスイッチを使用してMVCscaffoldedされます。MVCScaffolderは、データアクセス用のEFを使用してリポジトリクラス(および対応するIRepositoryインターフェイス)を作成します。この場合、DbContext派生オブジェクトは、各スキャフォールドリポジトリのデータメンバーとして常に「更新」されます。

MyContext context = new MyContext();

コントローラのスキャフォールディングの性質は、各コントローラに対して、通常、対応するリポジトリも取得するというものです。

質問:

1)コントローラーを持っているドメインオブジェクトごとにリポジトリを用意するのは理にかなっていますか?
これは、集約ルートのみを公開する必要があるリポジトリパターンと比較すると直感に反しているようです。

2)リポジトリオブジェクトがインスタンス化されるたびにDbContext派生オブジェクトの新しいインスタンスを生成することは意味がありますか、それともアプリの起動時にDbContext派生オブジェクトのシングルトンインスタンスをDIコンテナに登録して解決することは意味がありますか?次のようなシングルトンリポジトリ:

Bind<MyContext>().To<MyContext>().InSingletonScope();  //ninject code on app startup


 //resolve context in repositories: 
 MyContext context = ServiceLocator.Current.GetInstance<MyContext>();

アプリケーションの存続期間中、DbContext派生オブジェクトをシングルトンとして保持することの欠点はありますか?

ありがとう。

4

1 に答える 1

2
  1. それはあなたが何を期待するかによります。実際のリポジトリを使用する場合は、集約ルートを使用し、それらのリポジトリは常に固有であるため、自分で作成します(自動生成は行いません)。EFの汎用ラッパーが必要な場合は、現在のソリューションを使用します。T
  2. 通常、コントローラーが複数のリポジトリーを使用し、すべてのリポジトリー(作業単位パターン)へのデータの保存を調整する必要があるシナリオでは、HTTPリクエストごとに新しいコンテキストが使用されます。シングルトンコンテキストを使用しないでください!
于 2012-04-07T17:02:15.790 に答える