首页 > 其他分享 >EF的三种加载方式

EF的三种加载方式

时间:2023-08-21 17:25:04浏览次数:46  
标签:从表 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执行过程中的语句

               

 

标签:从表,EF,加载,查询,三种,关闭,主表,延迟
From: https://www.cnblogs.com/xiaobaicai12138/p/17646273.html

相关文章

  • Codeforces Round 893 (Div. 2) A-C题解
    CF893(Div.2)A.Buttons签到题。两人会优先选择c中的按钮来,避免自己的按钮消耗同时减少对方可选择的按钮。所以c%2==1等价于a的按钮数+1,c%2==0时相当于c按钮不存在,比较ab按钮的数量来得出答案即可。#include<iostream>usingnamespacestd;typedeflonglong......
  • Linux下MySql的三种安装方式:RPM 二进制包和源代码
    mysql的三种安装方式:RPM二进制包和源代码本次安装的系统平台为redhat5一、使用RPM包进行安装    首先可以从安装光盘中或者到mysql的网站上下载对应版本的rpm包如下:MySQL-server-community-5.1.38-0.rhel5.i386.rpmMySQL-client-community-5.1.38-0.rhel5.i386.rpm   ......
  • 在Vue3后台管理系统中使用watch和watcheffect
    ​ 1、watch在Vue3中的组合式API中,watch的作用和Vue2中的watch作用是一样的,他们都是用来监听响应式状态发生变化的,当响应式状态发生变化时,都会触发一个回调函数。constmessage=ref("test");watch(message,(newValue,oldValue)=>{console.log("新值:",ne......
  • Unity 资源加载的两种方式:Resources和AssetBundle最详细的解析(转)
    https://blog.csdn.net/xinzhilinger/article/details/115408934前言:在游戏开发学习初期,游戏体量较小,如果游戏场景需要Asset中的资源,我们可能会通过拖动的方式,将其添加到游戏场景中。而到了实际工作中,会发现再这样做就会使得各种拖动的资源非常复杂,难以查找与维护关于资源:在......
  • Vue3 toRef响应式失效问题排查
    父组件conststuRecordInfo=ref<any>({stuNum:11111})//接口请求返回stuRecordInfo.value.stuNum=22222<StuRecord:info="stuRecordInfo":pictureInfo="pictureInfo"/>子组件constinfo=toRef(props,'info')consts......
  • EFZ暑训2023 挂分记录
    \(Day1\)\(20230731\):挂\(120pts\),\(120\to0\)(原因:Dev-C++保存炸了)\(Day2\)\(20230801\):挂\(60pts\),\(250\to190\)(原因:不能先pop再push)\(Day3\)\(20230802\):挂\(-20pts\),\(100\to120\)(原因:以为T180pts,实际100pts)\(Day4\)\(20230803\):挂......
  • vue中export default data()外面的数据如何通过$t获取动态值
    如果将数据放到外面的`const`中,而不是在Vue组件的`data`选项中,那么无法直接通过`$t`方法来获取翻译文件的值。因为`$t`方法是Vue-i18n插件提供的实例方法,需要在Vue组件中使用。如果你想在外部使用`$t`方法来获取翻译文件的值,可以将Vue-i18n的实例导出,并在外部文件中引入该实例来......
  • 解析BeanDefinitionRegistry与BeanDefinition合并
    本文分享自华为云社区《Spring高手之路12——BeanDefinitionRegistry与BeanDefinition合并解析》,作者:砖业洋__。1.什么是BeanDefinitionRegistry?BeanDefinitionRegistry是一个非常重要的接口,存在于Spring的org.springframework.beans.factory.support包中,它是Spring中注......
  • C#动态加载dll创建对象,并调用方法
    C#中有一种应用场景,就是根据供应商、服务商、平台等的不同,可以封装不同的类库,但是这些类库都实现同一套接口;然后在配置文件或者数据库中配置,根据供应商、服务商、平台不同,动态的加载对应的dll,然后创建对象,调用方法;提高系统的扩展性。 示例代码://Seehttps://aka.ms/new-con......
  • Asp.net Core Web API 启动时出现报错Failed to load API definition
    1、新建的Asp.netCoreWebAPI项目启动时一般是没有问题的,如果在controller下增加多个操作后再启动会出现swagger的报错-FailedtoloadAPIdefinition,基本是由于以下两种原因,分别排查即可: (1)如上图1位置:默认webapi模板创建时只有一个方法所以没有[action] 当我们增加多个......