EF4包括()子类的子项

时间:2011-02-19 11:14:52

标签: entity-framework

出于这个问题的目的,让我们假设我在我的模型中定义了这两个实体 -

public class Person
{
    public Guid Id
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }
}

public class Parent : Person
{
    public IEnumerable<Person> Children
    {
        get;
        set;
    }
}

我们还假设我有一个PersonRepository,它从数据库中加载所有人。现在,数据库中的某些人将成为父实体,因此定义了子项。

我的问题是,当我从存储库加载人员列表时,是否可以指示Linq包含()任何人都是父实体的子项?

顺便说一下,懒惰加载在这个实例中不起作用,因为在服务层中使用了存储库。

感谢您的帮助。

詹姆斯

1 个答案:

答案 0 :(得分:1)

不幸的是,唯一可能的直接方式是:

 myContext.Persons.OfType<Parent>.Include("Children")...

这种方法的问题是它只会加载父母。 所以可能的解决方案可能是复杂的Linq查询,它将由.Contcat或.Union连接两部分。一部分将仅查询人员,第二部分将仅查询包含子级的父母。 编辑:它仅在内存(IEnumerable)中工作,而不在db(IQueryable)中。

所以另一种方法可以先运行Person查询,然后只对第一个查询中返回的父项执行第二个查询。