0

私はEntity FrameworkでASP.NET MVC3を使用しており、DI(Ninject)で一般的なリポジトリパターンを使用しています。同じクエリ内の異なるプロジェクトの異なるリポジトリ

私は他のサイトに接続するメインプロジェクトを持っています。メインプロジェクトには、db内の一般テーブルに接続する独自のドメインリポジトリがあります。それに接続する各サイトには、自身のdbテーブルに接続する独自のドメインリポジトリもあります。私の問題は、私は、同じクエリで2つの異なるdbcontextを使用することはできません叫ぶことはありません叫ぶことはありませんメインのプロジェクトテーブルとサイトテーブルを両方のサイトテーブルを結合する複雑なlinqクエリをしようとするときです。だから私は私のクエリを分割し、他のリポジトリテーブルで使用する前に、1つのリポジトリテーブル(ToList())からデータをプルする必要があります。私はそれを見て、メインプロジェクトがサイトプロジェクトのDllとして提供されるため、両方のリポジトリに同じDbContextを使用することはできません。

+0

私はあなたの質問にタグを付けました。タグに「ninject」を追加することで、Ninjectの専門家の1人があなたの状況に合わせてWebリクエストを得るようにNinjectを設定する方法をあなたに説明できることを願っています。 – Steven

+0

@スティーブン:ありがとう:) –

答えて

2

あなたは自分で答えを出しました。 1つのクエリに複数のDbContextインスタンスを使用することはできません(これについて考えるとかなり明白です)。代わりに、単一のWeb要求内のすべてのリポジトリに対して単一のインスタンスを使用します。 NinjectはPer Web Request lifestyleです。

+0

問題は、メインプロジェクトリポジトリは、サイトプロジェクトのDLLとして提供されます。 –

+0

なぜそれは問題ですか?すべてのアセンブリは同じWebアプリケーション(同じアプリケーションドメイン内)で実行されますか?アプリケーションのComposition Rootでこれを設定するだけです。 – Steven

+1

@mastha:あなたのリポジトリが宣言されている場所は関係ありません。単純にリポジトリはコンテキストをラップし、コンテキストはデータベースに接続をラップします。複雑なクエリを作成する場合は、クエリのすべての部分を同じ接続上で実行する必要があります。それらのアーキテクチャが間違っていて、ホワイトボードに戻って、別の方法でアプリケーションを設計して、作成されたリポジトリインスタンスへのコンテキストの依存性注入を伴うリクエストコンテキストのインスタンス化をサポートする必要があります。 –

関連する問題