当我有多态集合时,如何在Entity Framework 4.3中进行多级预先加载?

时间:2012-03-06 09:55:58

标签: entity-framework entity-framework-4.1 eager-loading

我有以下课程:

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 个答案:

答案 0 :(得分:1)

我认为在这种情况下,扩展方法Include解析为字符串“Boys”,显然,成员方法Include不能包含它。

即使这会运行,我怀疑拥有Children个只收集Boy个对象的集合会有问题。对我来说,这将是该集合的不确定状态,因为它代表了父母的 子女。所以它要么应该包含所有孩子,要么是空的。

如果您经常需要Boys集合(或它的真实链接)及其引用(Toy),您应该将其映射为单独的导航属性。否则请在Children集合上执行OfType()