EF的三种加载方式

发布时间 2023-08-21 17:22:49作者: 木乃伊人

一、三种加载方式

      延迟加载【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执行过程中的语句