我有一个延迟加载的模型类。直到现在,我总是使用懒惰加载,例如,加载一个学生的课程集合。
如果我想用所有已注册学生的集合加载所有课程,我是否可以使用Include()方法对延迟加载的属性进行急切加载?有什么副作用吗?
[ForeignKey("Id")]
public virtual ICollection<Students> Students { get; set; }
public IQueryable<Students> GetCoursesWithAllStudents()
{
return db.Courses.Include(c => c.Students);
}
发布于 2019-07-05 02:20:01
可以,停那儿吧。Include()
就是这样做的,它包括相关实体:它强制在正常情况下加载实体。您可以添加ThenInclude()
,使其更深入关系阶梯,因为它允许加载与先前包含的实体相关的数据。
然而,返回的实体是梯子中最高的实体,而不是最新的实体。在下面的示例中,返回一个IQueryable<Professors>
,加载Courses
实体,在Courses
中加载Students
。
public IQueryable<Professors> GetCoursesWithAllStudents()
{
return db.Professors.Include(professor => professor.Courses)
.ThenInclude(course => course.Students);
}
https://stackoverflow.com/questions/56899258
复制