Ami*_*mit 18 c# entity-relationship code-first eager-loading entity-framework-4.1
我试图在一次调用中急切地加载所有相关实体或实体集合.我的实体看起来像:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是,如果我调用一个方法来加载所有Employees,结果应该包括Person,EmployeeTitles列表,包括Title的代码和描述我已经能够到达第三级,即获得员工和人员列表EmployeeTitle.我不知道如何使用EmployeeTitle获取标题信息.我的代码是:
Context.Employees.Include("Person").Include(e => e.Titles).ToList();
Run Code Online (Sandbox Code Playgroud)
请详细说明如何实现这一目标.提前致谢.
Sla*_*uma 41
你可以试试这个:
Context.Employees
.Include(e => e.Person)
.Include(e => e.Titles.Select(t => t.Title))
.ToList();
Run Code Online (Sandbox Code Playgroud)
Select
可以应用于集合并加载对象图中下一级别的导航属性.
小智 5
由于这是我在谷歌搜索中的第一页,所以我只想发布此内容。
斯劳玛的回答很好。但如果您不打算实际使用该列表,建议使用 Load() 而不是 ToList()。所以它会是:
Context.Employees
.Include(e => e.Person)
.Include(e => e.Titles.Select(t => t.Title))
.Load();
Run Code Online (Sandbox Code Playgroud)