我正在阅读Microsft关于ASP.NETMVC5和EF6的教程,链接是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和**所有**讲师课程以及与每门课程相关的Department.

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

如果是,为什么之后,如果 Select 了讲师(id!=空),则再次加载视图模型课程?

viewModel.Courses = viewModel.Instructors.Where(i => i.ID == id.Value).Single().Courses;

有没有人能解释一下?

推荐答案

第一个加载是将所有讲师及其相关的OfficeAssignments和课程从数据库加载到viewModel的Inductors属性中,就像您所理解的那样,所以这是Eager 加载部分,所有相关数据都从数据库中获取.

第二个加载是将所有相关课程从viewModel(在第1部分中获取)的讲师属性加载到viewModel的Courses属性.因此,该部分根本不从数据库中提取,从而使您不必打开另一个到数据库的连接.

Asp.net相关问答推荐

IIS HTTP 错误 500.19

带有模型的 mvc 上传文件 - 第二个参数发布的文件为空

将 NUnit 添加到 ASP.NET MVC 测试框架的选项中

在 EF4.1 中正确地从上下文中附加和分离实体

解析器错误消息:文件/TestSite/Default.aspx.cs不存在

用户NT AUTHORITY\NETWORK SERVICE登录失败

如何从 RouteData 获取路由名称?

在asp.net mvc c#中使用cookie

VirtualPath 在当前应用程序根目录之外

Asp.net 中的下拉列表验证使用必填字段验证器

IIS 会话超时与 ASP.NET 会话超时

使 Web.config 转换在本地工作

如何在我自己的方法中模仿 string.Format()?

如何防止aspxerrorpath作为查询字符串传递给 ASP.NET 自定义错误页面

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

asp.net 网站上的第一页加载缓慢

Application_Start 和 Application_OnStart 之间的区别

在 ASP.NET 中获取服务器的 IP 地址?

try 为 Medium Trust 开发是否会失败?

MVC4 中 Global.asax.cs 页面中的问题