您的位置:首页 > 其它

MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式

2016-11-24 11:54 260 查看
通过上一篇的学习 我们把demo的各种关系终于搭建里起来 以及处理好了如何映射到数据库等问题 但是 只是搭建好了关系 问题还远没有解决

这篇就来写如何查找导航属性 和查找导航属性的几种方式 已经跟踪生成的SQL来检测是否满意 通过这节学习 来明白什么时候用哪个~~

一.三种加载

1.延迟加载

View Code
继续分析

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


如果点击教师 则可查看该教师教的课程 这个id 就是教师ID 一会儿会在视图展示这个 这个就是根据教师查看课程

接着是点击课程 查看所选的学生和分数

if (courseId != null)
{
viewModel.Enrollments = viewModel.Courses.Where(i => i.CourseID == courseId.Value).Single().Enrollments;
}


这里还给出里另一种方法

课程类
这里面加了 院系ID 我以前一直觉得没有必要加这个 今天在做这个导航属性查找时 发现一个问题 做个小实验

比如我想得到其中一个课程的ID 如果有院系ID 属性 可以这么写

var courses = db.Courses.ToList();
int i = courses[0].DepartmentID;


如果没 可以这么写

int i = courses[0].Department.DepartmentID;


首先 这个都没有用贪婪加载 默认的延迟加载 如果你使用上面的 则不会往数据库里去执行一条根据课程ID查找院系的SQL语句

但你使用下面的 则会往数据库里发送一条查找语句

这点 EF做的是并不好的 在NH里 两种方法 都不会发送 因为在下面那里使用了代理 而EF没有

我想问的是 是我哪操作的不对么? 造成了这个原因? 请高手解答下

四.总结

关系的加载就结束了 其实写关系加载的园子中有不少好文章了 我这里写的少了些~~

不过关系的操作还没有结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: