C# 使用实体框架加载嵌套实体/集合

C# 使用实体框架加载嵌套实体/集合,c#,entity-framework-4.1,code-first,entity-relationship,eager-loading,C#,Entity Framework 4.1,Code First,Entity Relationship,Eager Loading,我试图在一个调用中加载所有相关实体或实体集合。 我的实体看起来像: Class Person { public virtual long Id { get; set; } public virtual string FirstName { get; set; } public virtual string LastName { get; set; } } Class Employee { public virtual long Id { get; set; }

我试图在一个调用中加载所有相关实体或实体集合。 我的实体看起来像:

Class Person
{
    public virtual long Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}

Class Employee
{
    public virtual long Id { get; set; }
    public DateTime AppointmentDate { get; set; }
    public virtual ICollection<EmployeeTitle> Titles { get; set; }
    public virtual Person Person { get; set; }
}

Class EmployeeTitle
{
    public virtual long Id { get; set; }
    public virtual bool IsCurrent { get; set; } 
    public virtual Title Title { get; set; }
}
Class Title
{
    public virtual long Id { get; set; }
    public virtual string Code { get; set; }
    public virtual string Description { get; set; }
}
请阐明如何实现这一点。提前感谢。

您可以尝试以下方法:

Context.Employees
    .Include(e => e.Person)
    .Include(e => e.Titles.Select(t => t.Title))
    .ToList();

Select
可以应用于一个集合,并加载对象图中下一级的导航属性。

由于这是我在谷歌搜索的第一页,我只想发布这个

斯劳玛的回答很好。但如果您不打算实际使用列表,建议使用Load()而不是ToList()。因此,这将是:

    Context.Employees
        .Include(e => e.Person)
        .Include(e => e.Titles.Select(t => t.Title))
        .Load();

重要提示:不要意外地将同一变量用于两个lambda表达式
。包括(x=>x.Titles.Select(x=>x.Title))
,否则
将无法将lambda表达式转换为类型“string”,因为它不是委托类型
必须具有“using System.Data.Entity”,否则,它将显示为这个重载不存在。有没有一种方法可以通过使用
Include(string)
实现这一点?@afakGür:是的,只需使用“点路径”:
Include(“Titles.Title”)
+1花了一段时间才在谷歌中找到正确的关键字(“实体加载相关的集合,有集合”)但这是有效的:)
    Context.Employees
        .Include(e => e.Person)
        .Include(e => e.Titles.Select(t => t.Title))
        .Load();