Могу ли я использовать нетерпеливую и ленивую загрузку одновременно? - PullRequest
0 голосов
/ 05 июля 2019

У меня есть класс модели с отложенной загрузкой. До сих пор я всегда использовал ленивую загрузку, например, загружал одного ученика набором его курсов.

Если я хочу загрузить все курсы с коллекцией всех зачисленных студентов, могу ли я использовать метод Include () для быстрой загрузки в свойство с отложенной загрузкой? Есть ли побочные эффекты?

[ForeignKey("Id")]
public virtual ICollection<Students> Students { get; set; }
public IQueryable<Students> GetCoursesWithAllStudents()
{
     return db.Courses.Include(c => c.Students);
}

1 Ответ

0 голосов
/ 05 июля 2019

Да, вы можете.Include() специально делает это, он включает связанные сущности: он заставляет их загружаться, когда обычно их нет.Вы можете добавить ThenInclude(), чтобы углубиться вниз по лестнице отношений, поскольку это позволяет загружать данные, относящиеся к ранее включенной сущности.Однако возвращаемая сущность является самой высокой в ​​лестнице , а не самой последней.В следующем примере возвращается IQueryable<Professors> с загруженными объектами Courses и внутри Courses Students.

public IQueryable<Professors> GetCoursesWithAllStudents()
{
     return db.Professors.Include(professor => professor.Courses)
                         .ThenInclude(course => course.Students);
}
...