2016-06-13 7 views
0

自分のプロジェクト(Webアプリケーション)でDI用にAutofacを使用しています。私は私のコンポーネント(repo1とrepo2)で登録していますAutofacを使用してInstancePerRequestと異なるコンテキスト

from repo1 in repository1.All() 
join repo2 in repository2.All() 
    on repo1.SomeField = repo2.SomeField 
..... 

このように同じDB何かに2つの異なるテーブルを結合するLINQ式(すべてが())dbSet.AsQueryableオーバー単なるラッパー(ある)持っていますInstancePerRequest()を持つコンテナビルダー。

LINQコードでコードを実行すると、「指定されたLINQ式に異なるコンテキストに関連付けられたクエリへの参照が含まれています」というエラーが発生します。

私は、dbContextが(要求ごとに)InstancePerRequest()を介して登録されたコンポーネント間で共有されていると思っていました。

思考?

ありがとうございます!

+1

dbContextはどのように作成されていますか?オートファックでも登録されていますか?もしそうなら、どのように登録されていますか? –

+0

あなたはそれがWebアプリケーションだと言ったら、どんなタイプを意味しますか?これはWebApi、WCF、MVCなのですか?あなたのアプリケーションタイプに適切なオートファクトインテグレーションライブラリを使用していますか? –

+0

"リポジトリ"コンストラクタは表示されません。正しく動作させたい場合は 'DbContext'に' PerRequest'を登録して、 "リポジトリ"にコンストラクタパラメータとして注入させる必要があります。そうすればうまくいくでしょう。 –

答えて

1

「リポジトリ」コンストラクタは表示されません。それが正しく動作するようにするには、DbContextPerRequestに登録し、 "リポジトリ"にコンストラクタパラメータとして注入させる必要があります。そうすればうまくいくでしょう。 PerRequest登録されたコンポーネントの依存関係は、同じライフサイクルでインスタンス化する必要があるという暗黙の前提はありません。デフォルトでは、すべてのコンポーネントは依存関係ごとに登録されます。

+0

Alexeyに感謝します。私は私のリポジトリコンストラクタに注入されたDbContextを見逃しました。今はうまくいく。 –

関連する問題