0

プライマリキー(AccLinkID)と外部キー(aspnet_Users UserID)を持つテーブルがある場合、外部キーがLinq to Entitiesを使用してオブジェクトを選択する方法を教えてください。外部キーを使用してオブジェクトを選択する方法

User myUser = _myDB.AccLinkSet.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users; 

は動作しませんでした...

誰もが任意のアイデアがありますか?

答えて

1

これを試してみてください:今のところ

User myUser = _myDB.AccLinkSet.Include("aspnet_Users") 
    .Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users; 
+1

+1、Entity Frameworkは参照されたオブジェクトセットを自動的にロードしません.Load()を使用して明示的にロードするか、クエリ結果にこの.Includeメソッドを含める必要があります。 –

+1

上記のコードは動作しません。 Includeは新しいObjectQueryを返します。これは無視して(収集できるように)、含まれていないObjectQueryを使用します。 IncludeとWhereは*同じ行*になければなりません。 –

+0

@Craig Stunz - 感謝、答えを更新しました –

0

、Entity Frameworkの1で、あなたは自動遅れロードを得ることはありません、例えばあるエンティティから次のエンティティへ移動する場合は、.Include("OtherEntity")を選択してそれらのエンティティをクエリに含めるか、エンティティをロードするためにEntityContextで明示的に.Load("OtherEntity")を呼び出す必要があります。

これは、EFチームによる設計上の決定であり、自動ローディング遅延ロードをサポートしないようにしました。これは、あまりにも危険であると考えていたからです。彼らは、ユーザーが第2のエンティティのセットを含む/ロードしていることを明確かつ明白にしたかったのです。

今後のEF v4(.NET 4.0では2009年末にリリースされる予定)は、自動遅延ロードをサポートします(使用する場合)。

context.ContextOptions.DeferredLoadingEnabled = true; 

は、その新機能のいくつかの記事を参照してください:あなたはそれがデフォルトでオフなので、明示的に有効にする必要があり

1

あなたは解決することができますが、他の人たちも示唆しているように、これをインクルードで行うことは、私がそれをやる方法ではありません。代わりに、私は含める必要としたことがないプロジェクト、したい:この場合

var q = from al in yDB.AccLinkSet 
     where al.LinkID == linkId 
     select al.aspnet_Users; 

を、ユーザーが自動的にロードされます。

関連する問題