首页 新闻 会员 周边 捐助

Entity FrameWork 问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-07-04 13:50
1         /// <summary>
2         /// 根据表达式获得单个对象(已执行)
3         /// </summary>
4         /// <param name="where"></param>
5         /// <returns></returns>
6         public T Single(Expression<Func<T, Boolean>> where)
7         {
8             return this._DbSet.SingleOrDefault(where);
9         }

以上代码 会把实体的 外键属性页查询出来吗? 比如一个用户表 tb_user 有个部门ID是个外键,会把这个部门的实体信息页查询出来,但是我只想要这个ID就可以了,也就是只查询这个用户实体表的所有字段就可以i了,有什么办法解决,谢谢!

xu_happy_you的主页 xu_happy_you | 菜鸟二级 | 园豆:222
提问于:2013-07-04 10:14
< >
分享
最佳答案
0

运行一下程序,然后通过SQL Profiler看一下实际执行的SQL就知道了

收获园豆:5
dudu | 高人七级 |园豆:30948 | 2013-07-04 11:00

我好想搞错了,当我调用那个外键的实体的时候就会执行,不调用就不会执行,对吗?请dudu告诉一下,谢谢!SQL Profiler 这个我没有看到那执行的SQL语句,调用导航属性就会执行?对吗?

xu_happy_you | 园豆:222 (菜鸟二级) | 2013-07-04 12:27

@xu_happy_you: 是的,调用导航属性时会执行,也可以不让它执行

dudu | 园豆:30948 (高人七级) | 2013-07-04 13:19

@dudu: 非常感谢 dudu

xu_happy_you | 园豆:222 (菜鸟二级) | 2013-07-04 13:49
其他回答(3)
0

当你把导航属性设置成virtual时,如果不在查询中指定加载,那么导航属性是延迟加载,也就是在你使用的时候才会加载。

 

你可以在dbcontext的构造函数中指定是否启用延迟加载。

Configuration.LazyLoadingEnabled = false;
收获园豆:2
写代码的小2B | 园豆:4377 (老鸟四级) | 2013-07-04 11:14
0

不要 Include 部门进去就行了

收获园豆:1
Yu | 园豆:12990 (专家六级) | 2013-07-04 11:43
0

EF会有延迟加载。只要你不Include,默认是不会调用的。如果你访问了实体的外键属性,那么EF才会发起语句去查询。

总结下:

1、默认是不会查询外键属性的;

2、当使用Include扩展方法,那么外键属性是会查询出来的;

3、当访问了实体的外键属性,会在访问的时候发起语句去查询;

收获园豆:2
幻天芒 | 园豆:37205 (高人七级) | 2013-07-04 12:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册