首页 新闻 赞助 找找看

EF查询到的数据为何要返回dynamicproxies数据?

0
悬赏园豆:20 [已解决问题] 解决于 2013-10-21 17:23
 ItcastSimEntities db = new ItcastSimEntities();
 db.Configuration.ProxyCreationEnabled = false;
Student stu
= db.Students.First();

已经知道可以用第二行代码控制是否返回代理类,我还想知道为什么默认要返回一个动态代理类,它的作用或意义是?

happydaily的主页 happydaily | 菜鸟二级 | 园豆:301
提问于:2013-10-19 02:52
< >
分享
最佳答案
2

当 EF 创建实体对象的时候 ( 例如,在执行查询的时候 ),EF 经常会创建动态生成的派生自实体的代理对象。代理重写了实体的虚拟属性来插入在访问属性的时候自动执行的钩子。比如 这种机制用来支持延迟加载或者关联。

收获园豆:20
Zery | 大侠五级 |园豆:6151 | 2013-10-19 07:31

延迟加载不是和include有关的

happydaily | 园豆:301 (菜鸟二级) | 2013-10-19 10:02

@happydaily: 

正是因为有代理才会有延迟加载,加载所针对的对象是代理对象,而并非实例对象所以不会立即加载数据,另外 include属于贪婪加载(非延迟)

Zery | 园豆:6151 (大侠五级) | 2013-10-19 11:07

@Zery-zhang: 如何能观察(检验)是否为延迟加载?

happydaily | 园豆:301 (菜鸟二级) | 2013-10-20 10:11

@happydaily: 

断点调试看对象是否已加载,一般.tolist , .Count等操作会执行查询操作

Zery | 园豆:6151 (大侠五级) | 2013-10-20 18:00

@happydaily: @Zery-zhang  端点调试不是太好查看是否延迟加载,建议查看生成的sql.

Sql Server 数据库可以用profile

Mysql 可以用sql执行记录的日志

平常心队长 | 园豆:1113 (小虾三级) | 2013-10-21 08:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册