FreeSql学习笔记——9.延时加载
前言
然后修改下StartUp
IFreeSql freeSql = new FreeSqlBuilder()
.UseConnectionString(DataType.SqlServer, Configuration.GetConnectionString("SqlServerConnection"))
.UseAutoSyncStructure(true)
.UseLazyLoading(true) //开启延时加载功能
.UseMonitorCommand(cmd => Console.WriteLine(cmd.CommandText))
.Build();
接着就是在实体中新增导航属性virtual关键字
Class
public class Class
{
[Column(IsIdentity = true, IsPrimary = true)]
public long Id { get; set; }
[Column(IsNullable = false, DbType = "varchar(20)")]
public string Name { get; set; }
public virtual List<Student> StudentList { get; set; }
}
Student
public class Student
{
[Column(IsIdentity = true, IsPrimary = true)]
public long Id { get; set; }
[Column(IsNullable = false, DbType = "varchar(20)")]
public string Name { get; set; }
public int Age { get; set; }
public StatusEnum Status { get; set; }
public DateTime AddTime { get; set; }
[Column(IsNullable =true,DbType = "varchar(100)")]
public string Remark { get; set; }
[Column(IsVersion = true)]
public long Version { get; set; }
public long ClassId { get; set; }
public virtual Class Class { get; set; }
}
示例
在未开启延时加载前,查询Class时,会得到一个为Null的StudentList,因为查询出Class后并未给StudentList赋值;
var classOne = _freeSql.Select<Class>().First();
Console.WriteLine($"StudentList==Null:{classOne.StudentList == null}");
if (classOne.StudentList != null)
{
var student = classOne.StudentList.FirstOrDefault();
}

而在开启懒加载后,除了StudentList以外的
StudentList = 函数求值需要运行所有线程。
当使用到StudentList的时候会执行一个sql查询,获取到关联数据

可以看到懒加载是在值被使用到的时候才会加载出来,每次加载只加载出需要的数据,从而提升了获取数据的效率,也提升了与数据库的交互。
FreeSql学习笔记——9.延时加载的更多相关文章
- thinkphp学习笔记9—自动加载
原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...
- node 学习笔记 - Modules 模块加载系统 (1)
本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...
- Openstack本学习笔记——Neutron-server服务加载和启动源代码分析(三)
本文是在学习Openstack过程中整理和总结.因为时间和个人能力有限.错误之处在所难免,欢迎指正! 在Neutron-server服务载入与启动源代码分析(二)中搞定模块功能的扩展和载入.我们就回到 ...
- Spring学习笔记(1)——资源加载
<!-- 占坑,迟点补充底层原理 --> Spring支持4种资源的地址前缀 (1)从类路径中加载资源——classpath: classpath:和classpath:/是等价的,都是相 ...
- node 学习笔记 - Modules 模块加载系统 (2)
本文同步自我的个人博客:http://www.52cik.com/2015/12/14/learn-node-modules-module.html 上一篇讲了模块是如何被寻找到然后加载进来的,这篇则 ...
- 【EF学习笔记08】----------加载关联表的数据 显式加载
显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...
- 【EF学习笔记07】----------加载关联表的数据 贪婪加载
讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entities()) { var classes = db.Classes.Wh ...
- 【EF学习笔记06】----------加载关联表的数据 延迟加载
讲解之前,先来看一下我们的数据库结构:班级表 学生表 延迟加载 //延迟加载 using (var db = new Entities()) { //查询班级 var classes = (from ...
- webpack学习笔记--按需加载
为什么需要按需加载 随着互联网的发展,一个网页需要承载的功能越来越多. 对于采用单页应用作为前端架构的网站来说,会面临着一个网页需要加载的代码量很大的问题,因为许多功能都集中的做到了一个 HTML 里 ...
- Office365学习笔记—Lookup类型加载条目过多解决方案
1,随着接触的项目越来越多,遇到的各种奇葩的问题也越来越多,不得不说,SharePoint是个好东西,提高了开发效率,简化了很多基础的功能.但是令人头疼的问题是,当你想做个稍微复杂点的功能,就不得不研 ...
随机推荐
- linux模拟HID USB设备及wireshark USB抓包配置
目录 1. 内核配置 2. 设备配置 附 wireshark USB抓包配置 笔者开发USB设备时的一些记录 1. 内核配置 内核启用USB Gadget,使用fs配置usb device信息. De ...
- Mybatis【5】-- Mybatis多种增删改查那些你会了么?
前面我们学会了Mybatis如何配置数据库以及创建SqlSession,那怎么写呢?crud怎么写? 代码直接放在Github仓库[https://github.com/Damaer/Mybatis- ...
- 用VuePress在GitHub Pages上搭建博客
请先点击链接RobinDevNotes,体验用VuePress搭建博客的效果(logo还没有合适的替换),目前部署在GitHub Pages上,国内访问速度还可以,再阅读本文感受来龙去脉和搭建过程. ...
- 出现警告信息 Please enter a commit message to explain why this merge is necessary,
Please enter a commit message to explain why this merge is necessary, # especially if it merges an u ...
- Bugku-CTF getshell
题目: <?php define('pfkzYUelxEGmVcdDNLTjXCSIgMBKOuHAFyRtaboqwJiQWvsZrPhn', __FILE__); $cPIHjUYxDZVB ...
- 明察秋毫--用ss工具统计网络栈内存使用
前言 本文介绍了用ss工具来统计一下当前网络栈的内存使用情况 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS 查看socket内存相关参数,-m 参数 ss -tm State ...
- Linux 中的内存使用率计算方式
背景介绍 在工作中处理问题的时候,遇到一个问题,自己根据 top 命令时查看到的 used 和 total 计算出来的内存使用率已经达到 90% 以上了,但是系统自带的监控软件计算出来的使用率往往没有 ...
- Qt音视频开发16-mpv通用接口
一.前言 前面几篇文章,依次讲了解码播放.录像存储.读取和控制.事件订阅等,其实这些功能的实现都离不开封装的通用的接口,最开始本人去调用一些设置的时候,发现多参数的不好实现,原来需要用mpv_node ...
- 是时候弃用ibSass和node-sass而采用Dart Sass了!
背景说明 此次改动是在 Sass 核心团队进行了大量讨论之后,得出的结论,现在是时候正式宣布弃用 LibSass 和基于它构建的包(包括 Node Sass).多年来,LibSass 显然没有足够的工 ...
- 鸿蒙ArkUI-X简介
ArkUI是一套构建分布式应用的声明式UI开发框架.它具备简洁自然的UI信息语法.丰富的UI组件.多维的状态管理,以及实时界面预览等相关能力,帮助您提升应用开发效率,并能在多种设备上实现生动而流畅的用 ...