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了,有什么办法解决,谢谢!
运行一下程序,然后通过SQL Profiler看一下实际执行的SQL就知道了
我好想搞错了,当我调用那个外键的实体的时候就会执行,不调用就不会执行,对吗?请dudu告诉一下,谢谢!SQL Profiler 这个我没有看到那执行的SQL语句,调用导航属性就会执行?对吗?
@xu_happy_you: 是的,调用导航属性时会执行,也可以不让它执行
@dudu: 非常感谢 dudu
当你把导航属性设置成virtual时,如果不在查询中指定加载,那么导航属性是延迟加载,也就是在你使用的时候才会加载。
你可以在dbcontext的构造函数中指定是否启用延迟加载。
Configuration.LazyLoadingEnabled = false;
不要 Include 部门进去就行了
EF会有延迟加载。只要你不Include,默认是不会调用的。如果你访问了实体的外键属性,那么EF才会发起语句去查询。
总结下:
1、默认是不会查询外键属性的;
2、当使用Include扩展方法,那么外键属性是会查询出来的;
3、当访问了实体的外键属性,会在访问的时候发起语句去查询;