【问题标题】:Can I use eager and lazy loading at the same time?我可以同时使用急切和延迟加载吗?
【发布时间】:2025-03-04 00:50:02
【问题描述】:

我有一个开启延迟加载的模型类。到目前为止,我一直使用延迟加载,例如为单个学生加载他的课程集合。

如果我想加载所有已注册学生集合的所有课程,我可以使用 Include() 方法在延迟加载的属性上预先加载吗?有没有副作用?

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

【问题讨论】:

  • 没有问题,没有副作用。

标签: c# entity-framework entity-framework-6


【解决方案1】:

是的,你可以。 Include() 专门这样做,它包括 相关实体:它强制它们在正常情况下不被加载。您可以添加ThenInclude() 以更深入地了解关系阶梯,因为它允许加载与先前包含的实体相关的数据。
但是,返回的实体是阶梯中最高的实体,而不是最新的。 在下面的示例中,返回一个 IQueryable&lt;Professors&gt;,加载了 Courses 实体,并在 Courses 内部,Students

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

【讨论】:

    最近更新 更多