ItcastSimEntities db = new ItcastSimEntities(); db.Configuration.ProxyCreationEnabled = false;
Student stu = db.Students.First();
已经知道可以用第二行代码控制是否返回代理类,我还想知道为什么默认要返回一个动态代理类,它的作用或意义是?
当 EF 创建实体对象的时候 ( 例如,在执行查询的时候 ),EF 经常会创建动态生成的派生自实体的代理对象。代理重写了实体的虚拟属性来插入在访问属性的时候自动执行的钩子。比如 这种机制用来支持延迟加载或者关联。
延迟加载不是和include有关的
@happydaily:
正是因为有代理才会有延迟加载,加载所针对的对象是代理对象,而并非实例对象所以不会立即加载数据,另外 include属于贪婪加载(非延迟)
@Zery-zhang: 如何能观察(检验)是否为延迟加载?
@happydaily:
断点调试看对象是否已加载,一般.tolist , .Count等操作会执行查询操作
@happydaily: @Zery-zhang 端点调试不是太好查看是否延迟加载,建议查看生成的sql.
Sql Server 数据库可以用profile
Mysql 可以用sql执行记录的日志