Подтвердить что ты не робот

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

Я пытаюсь с нетерпением загружать все связанные объекты или коллекцию Entity в один вызов. Мои объекты Похоже:

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

То, что Iam пытается сделать, - это если я вызываю метод для загрузки всех сотрудников, в результат должен входить Person, List of EmployeeTitles, включая код и описание из Title Я смог перейти на третий уровень, то есть получить Employee с человеком и список EmployeeTitle. Я не знаю, как получить информацию о названии с EmployeeTitle. Мой код для этого:

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

Прошу прояснить, как это сделать. Спасибо заранее.

4b9b3361

Ответ 1

Вы можете попробовать следующее:

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

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

Ответ 2

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

Ответ Slauma в порядке. Но рекомендуется использовать Load() вместо ToList(), если вы не планируете фактически использовать список. Так было бы:

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