2011-02-01 3 views
1

私のウェブサイトにはCurrentUserというプロパティを持つベースクラスがあります。 このプロパティのgetメソッドは、新しいコンテキストを作成し、認証Cookie情報に基づいてデータベースからUserオブジェクトを取得します。ここまでは順調ですね。EF 4の別のコンテキストにオブジェクトをアタッチする

しかし、コンテキストが閉じられているので、これ以外で行うことができるのは、たとえばFirstNameのようにUserの直下のプロパティを呼び出すことだけです。

しかし、たとえば私がCurrentUser.UserOfficesのようなリレーションを取得しようとすると、クエリにUserOfficesが含まれていないため、これは機能しません。

CurrentUserオブジェクトを添付できるベースクラスの外に新しいコンテキストを作成する方法はありますか?私は運がないctx.Attach(CurrentUser)を試しました。

なぜ私がUserOfficesを含まないのか不思議に思うかもしれません。これは単純に、テーブルとの関係が非常に多く、ウェブページ間でどのような関係が必要なのかが異なるため、それらをすべて含めたくないためです。

アイデア?

答えて

1

あなたのエンティティを添付して、明示的にプロパティをロードしようとすることができます:

ctx.Attach(CurrentUser); 
ctx.LoadProperty(CurrentUser, u => u.UserOffices); 

私はこれがPOCOSで動作するかどうかはわかりません。

必要な指定のナビゲーションプロパティを含むIncludeを使用してオブジェクトを再度照会することもできます。

もう1つの選択肢は、現在のユーザーの条件を制限するLinq-to-entitiesクエリでUserOfficesを読み込むだけです。

+0

ありがとうございました。それは完璧に働いた。これを実行した後、私はUserOfficeの構造を深く知ることができました。あなたが答える前に、私は一時的にあなたの他の選択肢が好きで、それも当然働きました。問題は、最初にベースコントローラーでオブジェクトを取得する必要がないと感じることです。 – Andreas

関連する問題