我可以同时使用急切和延迟加载吗?
Posted
技术标签:
【中文标题】我可以同时使用急切和延迟加载吗?【英文标题】:Can I use eager and lazy loading at the same time? 【发布时间】:2019-11-15 20:43:44 【问题描述】:我有一个开启延迟加载的模型类。到目前为止,我一直使用延迟加载,例如为单个学生加载他的课程集合。
如果我想加载所有已注册学生集合的所有课程,我可以使用 Include() 方法在延迟加载的属性上预先加载吗?有没有副作用?
[ForeignKey("Id")]
public virtual ICollection<Students> Students get; set;
public IQueryable<Students> GetCoursesWithAllStudents()
return db.Courses.Include(c => c.Students);
【问题讨论】:
没有问题,没有副作用。 【参考方案1】:是的,你可以。 Include()
专门这样做,它包括 相关实体:它强制它们在正常情况下不被加载。您可以添加ThenInclude()
以更深入地了解关系阶梯,因为它允许加载与先前包含的实体相关的数据。
但是,返回的实体是阶梯中最高的实体,而不是最新的。
在下面的示例中,返回一个 IQueryable<Professors>
,加载了 Courses
实体,并在 Courses
内部,Students
。
public IQueryable<Professors> GetCoursesWithAllStudents()
return db.Professors.Include(professor => professor.Courses)
.ThenInclude(course => course.Students);
【讨论】:
以上是关于我可以同时使用急切和延迟加载吗?的主要内容,如果未能解决你的问题,请参考以下文章