asp.net 有人能解释一下这个急切加载的例子吗?

s71maibg  于 2023-05-08  发布在  .NET
关注(0)|答案(1)|浏览(137)

我正在阅读微软关于Asp.NetMVC5和EF 6的教程,链接为text。现在我对下面的代码感到困惑。

public ActionResult Index(int? id, int? courseID)
{
    var viewModel = new InstructorIndexData();
    viewModel.Instructors = db.Instructors
        .Include(i => i.OfficeAssignment)
        .Include(i => i.Courses.Select(c => c.Department))   
        .OrderBy(i => i.LastName);

    if (id != null)
    {
        ViewBag.InstructorID = id.Value;
        viewModel.Courses = viewModel.Instructors.Where(
            i => i.ID == id.Value).Single().Courses;
    }

    if (courseID != null)
    {
        ViewBag.CourseID = courseID.Value;
        viewModel.Enrollments = viewModel.Courses.Where(
            x => x.CourseID == courseID).Single().Enrollments;
    }

    return View(viewModel);
}

 public class InstructorIndexData
    {
        public IEnumerable<Instructor> Instructors { get; set; }
        public IEnumerable<Course> Courses { get; set; }
        public IEnumerable<Enrollment> Enrollments { get; set; }
    }

我认为这些代码行将加载所有讲师,并为每个讲师加载相关的OfficeAssignment和所有讲师的课程,以及与每个课程相关的部门。

viewModel.Instructors = db.Instructors
        .Include(i => i.OfficeAssignment)
        .Include(i => i.Courses.Select(c => c.Department))   
        .OrderBy(i => i.LastName);

如果是这样,为什么之后,如果选择了讲师(id!=null),视图模型课程是否再次加载?
viewModel.Courses = viewModel.Instructors.Where(i => i.ID == id.Value).Single().Courses;
有人能解释一下吗

6pp0gazn

6pp0gazn1#

第一个加载是将所有Instructors及其相关的OfficeAssigments和Courses从数据库加载到viewModel的Instructors属性中,就像您所理解的那样,因此这是即时加载部分,其中所有相关数据都是从数据库中获取的。
第二个加载是将所有与选定讲师相关的Course从viewModel的Instructors属性(在第1部分中获取)加载到viewModel的Courses属性。因此,这部分根本不从数据库中获取数据,从而使您不必打开另一个到数据库的连接。

相关问题