Загрузка вложенных объектов/коллекций с помощью платформы 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();
Прошу прояснить, как это сделать. Спасибо заранее.
Ответы
Ответ 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();