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();