私は実パターンを使ったビジュアルスタジオソリューションを持っています。 IRepository(Crud実装)、IDbFactory(リポジトリで使用)、IUnitOfWorkがあります。私はまた、カスタムクエリーと複雑なデータベース操作を構築するためにリポジトリを使用するサービスを持っています。私はNinjectでIoCパターンも使用しています。 Web MVCコントローラでは、データベースにアクセスするためにサービスのみを使用します。 リポジトリは、EntityFrameworkコンテキストを作成するIDbFactoryを受け取ります。 私はいくつかの問題を抱えて:私はそれらの両方のGETALL()メソッドを呼び出して、2つのリポジトリを使用する必要がありますそれらを結合するための2つのテーブルにアクセスする必要があるときに、サービスでソリッドの原則、Asp Net MvcのリポジトリパターンとEntityFrameworkキャッシュ
- を。この場合、両方のリポジトリは同じEntityFrameworkコンテキストを共有する必要があります。
- 前のケースでは、すべてのリポジトリでDbContextを共有する必要があるため、異なるリポジトリのサービスでIQueryablesに参加することができます。
- これを達成するために、私はIoCコンテナ内でシングルトンスコープのDbContextを設定しました。したがって、すべてのリポジトリは同じDbContextを共有します。
- このソリューションの問題点は、DbContextにキャッシュがあることです。したがって、外部プロセス(Webプロジェクトとは異なる)が自分のデータを変更した場合、DbContextはそれを認識せず、Webプロジェクトは実際のデータを時々表示しません。
- I読んほぼすべてのリポジトリの呼び出しでDbContextを破壊するが、すべてのリポジトリが同じDbContext
私のプロジェクト構造と間違って私が何かを使用する必要がありますので、私はこれを行うカント?これは私がリポジトリ層で修正する必要があるものですか?私は何をするのですか?プロジェクトは開発段階にあり、データアクセスアーキテクチャを変更することができます。私はコントローラーでIQueryablesを使用して、データグリッドのユーザーフィルターがSQLクエリーを生成するのが好きです。
CodeReviewでは、これらの種類の質問に適したフォーラムを提供しています。例:http://codereview.stackexchange.com/questions/11785/ef-code-first-with-repository-unitofwork-and-dbcontextfactory –
これは、IRepositoryを構築することは通常時間の無駄であるという古典的な例です。 EFはすでにリポジトリと作業単位を実装しており、dbを抽象化しているので、何を達成するために抽象化の別のレイヤーを削除しましたか?あるリポジトリに保存するまで待ってから、同じコンテキストにオブジェクトが添付されているため、別のリポジトリに変更を保存してください。あなたがウェブサイトやサービスのようなものであれば、要求ごとにDbContextの寿命を延ばすことができますが、IRepositoryは通常その価値よりも問題が多い、 – Mant101
という別の問題は、あなたのDbContextがシングルトンだということです。これは、すべてのユーザーが同じDbContextを実行していることを意味します。 DBContext内の固有の作業単位を分割します。各作業単位に対して作成されたdbcontextが必要です。 – Fran