EF的三种加载方式
一、三种加载方式
延迟加载【Lazy Loading】、饥饿加载【Eager Loading】、显式加载【Explicit Loading】
二、区别
2.1、延迟加载:
说明:和淘宝商品列表一样,下拉刷新,按需加载。
特点:关闭延迟加载后,查询主表数据,主表中从表实体为null。
注意:1、全局配置:在数据库上下文的构造方法中添加:this.Configuration.LazyLoadingEnabled = true;
2、可以在使用的时候单独配置。
3、延迟加载,true为开启,false为关闭,默认就是延迟加载的。
4、延迟加载的数据在使用的时候才会加载出来,在遍历数据的时候建议使用延迟加载。
5、每次调用子实体(外键所在的实体),才会查询数据库。主表数据加载的时候,不去查询外键所在的从表。
6、需要满足的条件:a、poco类是public且不能为sealed;b、关联属性需要标记为Virtual
开启延迟加载的状态:
关闭延迟加载的状态:
2.2、饥饿加载:
说明:加载父对象的同时加载子对象。
使用步骤:1、关闭延迟加载;
2、查询主表的同时,通过Include把从表数据一并查询出来。
注意:由于查询主表的时候已经通过Include一次性将所有数据查询出来,所以在调用从表数据的时候,均从缓存中读取,无须查询数据库。
示例:
2.3、显式加载:
说明: 当禁用延迟加载,仍然可以通过显式加载来延迟加载相关实体。
使用场景:关闭延时加载后,单纯查询主表的数据,后面又想到再次查询从表,就需要哦用到显示加载了。
前提:1、关闭了延迟加载;
2、单纯查询了主表,没有使用Include函数关联查询从表。
使用步骤:1、单个实体用:Reference
2、集合用:Collection
3、最后需要Load一下
示例:
三、通过日志查看EF执行过程中的语句