0

主キー (AccLinkID) と外部キー (aspnet_Users UserID) を持つテーブルがある場合、Linq to Entities を使用して外部キーが指すオブジェクトを選択するにはどうすればよいですか。

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

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

誰にもアイデアはありますか?

4

3 に答える 3

1

Includeを使用してこれを解決することはできますが、他の人が示唆しているように、それは私が行う方法ではありません。代わりに、インクルードを必要としないプロジェクトを作成します。

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

この場合、ユーザーは自動的にロードされます。

于 2009-08-04T12:59:17.957 に答える
1

これを試して:

User myUser = _myDB.AccLinkSet.Include("aspnet_Users")
    .Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;
于 2009-08-04T04:38:47.700 に答える
0

現時点では、Entity Framework 1 では、自動遅延読み込みは発生しません。たとえば、あるエンティティから次のエンティティにトラバースする場合.Include("OtherEntity")、select で を実行してそれらのエンティティをクエリに含めるか、.Load("OtherEntity")EntityContextを明示的に呼び出して、そのエンティティをロードします。

これは、EF チームが自動魔法の遅延読み込みをサポートしないという設計上の決定でした。彼らは、ユーザーがエンティティの 2 番目のセットを含めたりロードしたりしていることをユーザーに明確かつ明白にしたかったのです。

需要が高いため、今後の EF v4 (2009 年末に向けて .NET 4.0 と共にリリースされる予定) は、自動遅延読み込みをサポートします (使用したい場合)。デフォルトではオフになっているため、明示的に有効にする必要があります。

context.ContextOptions.DeferredLoadingEnabled = true;

その新機能に関するいくつかの記事を参照してください。

于 2009-08-04T07:01:48.347 に答える