Loading Nested Entities / Collections with Entity

2019-01-22 19:50发布

I am trying to Eagerly load all the related entities or collection of Entity in one call. My Entities Looks like:

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; }
}

What Iam trying to do is if i call a method to load all Employees, the result should include Person, List of EmployeeTitles including the code and description from Title I have been able to get to the third level i.e. getting the Employee with person and list of EmployeeTitle. I don't know how to get the title information with the EmployeeTitle. My code to get this is:

Context.Employees.Include("Person").Include(e => e.Titles).ToList();

Please shed some light on how to accomplish this. Thanks in advance.

2条回答
可以哭但决不认输i
2楼-- · 2019-01-22 20:38

You can try this:

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

Select can be applied to a collection and loads navigation properties of the next level in the object graph.

查看更多
时光不老,我们不散
3楼-- · 2019-01-22 20:38

Since this is the first page in my search in google, I just wanted to post this.

Slauma's answer is fine. But it's recommended to use Load() instead of ToList() if you don't plan to actually use the list. So it would be:

    Context.Employees
        .Include(e => e.Person)
        .Include(e => e.Titles.Select(t => t.Title))
        .Load();
查看更多
登录 后发表回答