2012-03-06 4 views
3

私は次のクラスがあります。ポリモーフィックコレクションを使用している場合、Entity Framework 4.3で複数レベルのeagerローディングを行うにはどうすればよいですか?

public class Parent 
{ 
    public ICollection<Child> Children {get;set;} 
} 

public class Child 
{  
} 

public class Boy : Child 
{ 
    public Toy Toy {get;set;}  
} 

public class Girl : Child 
{  
    public Book Book {get;set;} 
} 

私は熱心にすべての男の子を持つ親をロードする:上記

Parents.Include(p => p.Children.OfType<Boys>().Select(b => b.Toy)); 

は動作しませんし、私はパスが無効であるというエラーを取得します。

どうすればよいですか?

答えて

1

この場合、拡張メソッドIncludeは、明らかにメンバメソッドIncludeに含めることができない文字列 "Boys"に解決されます。

これが実行されても、Boyオブジェクトでのみ埋め込まれたChildrenコレクションを持つことが問題になると思われます。私の場合、それはの親の子を表すので、のコレクションの不確定状態になります。だから、それはすべての子供を含むか、まだ空であるべきです。

Boysコレクション(または実際のペンダント)とその参照(Toy)が必要な場合は、別のナビゲーションプロパティとしてマップする必要があります。それ以外の場合は、子コレクションのOfType()を実行します。

+0

質問に記載されている例のように選択が続いた場合、OfTypeは機能しません。 –

+0

私は 'var boys = parent.Children.OfType ()'のようなものを意味します。 –

関連する問題