我正在阅读微软关于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;
有人能解释一下吗
1条答案
按热度按时间6pp0gazn1#
第一个加载是将所有Instructors及其相关的OfficeAssigments和Courses从数据库加载到viewModel的Instructors属性中,就像您所理解的那样,因此这是即时加载部分,其中所有相关数据都是从数据库中获取的。
第二个加载是将所有与选定讲师相关的Course从viewModel的Instructors属性(在第1部分中获取)加载到viewModel的Courses属性。因此,这部分根本不从数据库中获取数据,从而使您不必打开另一个到数据库的连接。