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

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

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

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

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

Пожалуйста, пролите свет на то, как этого добиться.Заранее спасибо.

Ответы [ 2 ]

41 голосов
/ 04 августа 2011

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

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

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

4 голосов
/ 08 мая 2014

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

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

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