Загрузка вложенных сущностей / коллекций с помощью Entity Framework

Я пытаюсь нетерпеливо загрузить все связанные сущности или коллекцию сущности за один вызов. Мои сущности выглядят так:

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

что я пытаюсь сделать, это если я вызываю метод для загрузки всех сотрудников, результат должен включать человека, список EmployeeTitles, включая код и описание из названия Я смог добраться до третьего уровня, то есть получить сотрудника с человеком и списком сотрудников. Я не знаю, как получить информацию о названии с помощью EmployeeTitle. Мой код, чтобы получить это:

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

пожалуйста, пролить свет на то, как это сделать. Спасибо заранее.

2 ответов


Вы можете попробовать это:

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

Select может применяться к коллекции и загружает навигационные свойства следующего уровня в графе объектов.


Так как это первая страница в моем поиске в google, я просто хотел опубликовать это.

Slauma это нормально. Но рекомендуется использовать Load() вместо ToList (), если вы не планируете фактически использовать список. Так и будет:
    Context.Employees
        .Include(e => e.Person)
        .Include(e => e.Titles.Select(t => t.Title))
        .Load();