新闻中心
EF Core预加载怎么用 EF Core Eager Loading (Include)教程
EF Core预加载通过Include和ThenInclude一次性加载关联数据以解决N+1问题:Include用于一级关联,ThenInclude用于多级嵌套,支持多种组合;需注意分页前调用、避免数据膨胀、慎用全量加载。

EF Core 预加载(Eager Loading)就是用 Include 主动把关联数据一次性查出来,避免访问导航属性时反复查库——这是解决 N+1 查询问题最直接有效的方式。
Include 基本用法:加载一级关联
只需在查询链中调用 .Include(x => x.N*igationProperty),EF Core 就会在生成 SQL 时自动加 JOIN 或发批量查询:
- 对引用类型(如
Post.Author),通常生成 LEFT JOIN - 对集合类型(如
Blog.Posts),默认用单独的 IN 查询(避免笛卡尔积),也可配成 JOIN - 必须用 Lambda 表达式,不能写字符串,否则编译不通过
示例:
var posts = context.Posts
.Include(p => p.Author)
.Include(p => p.Comments)
.ToList();
ThenInclude:加载多级嵌套关系
当关联再往下一层(比如作者还有 Profile,评论还有 Reply),就得接 ThenInclude:
- 它只能跟在
Include或上一个ThenInclude后面 - 每级都必须指向“上一级导航属性”的子属性,类型要严格匹配
- 支持集合→引用、集合→集合、引用→引用等组合
示例(三级加载):
星声AI
可分享的AI播客内容生成器和效率工具
185
查看详情
var blogs = context.Blogs
.Include(b => b.Posts) // Blog → Posts(集合)
.ThenInclude(p => p.Author) // Posts → Author(引用)
.ThenInclude(a => a.Profile) // Author → Profile(引用)
.ToList();
同时加载多个同级导航属性
一个实体常有多个独立的一级关联,比如博客既有文章,又有标签、分类:
- 重复调用
Include即可,顺序无关 - EF Core 会为每个
Include生成独立的 JOIN 或批量查询 - 注意:不要对同一个导航属性多次
Include,会报错
示例:
var blogs = context.Blogs
.Include(b => b.Posts)
.Include(b => b.Tags)
.Include(b => b.Category)
.ToList();
实用提醒:别踩这些坑
预加载不是越多越好,几个关键点得心里有数:
- 分页前一定要先
Include,否则Take(10)可能因 JOIN 导致结果重复或数量不准 - 一对多关系下过度
Include容易引发数据膨胀(比如 1 个博客 + 100 篇文章 + 每篇 5 条评论 = 500
行结果) - 不需要全部字段时,优先考虑
Select投影,比全量Include更轻量 - 若只想查部分子项(如只加载最近 3 条评论),
Include本身不支持过滤,得换思路(如用 GroupJoin 或显式查询)
基本上就这些。用好 Include 和 ThenInclude 不复杂,但容易忽略时机和层级约束。
以上就是EF Core预加载怎么用 EF Core Eager Loading (Include)教程的详细内容,更多请关注其它相关文章!
# 只需
# 黔南州新闻推广网站公示
# 网站推广好的网站有哪些
# 永宁网络推广优化营销
# 常山营销线上推广
# 郑东新区网站推广多少钱
# 郑州网站建设方案哪家好
# 饭店营销推广语
# 如何找锂电货源网站推广
# 惠州怎么推广我的网站
# 文章推广网站怎么做的快
# go
# 又有
# 心里有数
# 不需要
# 几个
# 这是
# 分页
# 笛卡尔
# 多个
# 加载
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Promise错误处理:在catch后终止链式then执行的策略
探索高级语言到原生C/C++的转译:挑战与内存管理策略
J*aScript设计模式实践_j*ascript代码优化
Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】
微信网页版官方快速登录入口 微信网页版网页版账号直达
顺丰国际快递查询 国际件官方查询入口
jQuery Mask 插件中实现电话号码固定前导零的教程
Pygame教程:解决用户输入与游戏状态更新不同步问题
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
58动漫网在线官方网 58动漫网正版动漫入口网址
电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】
百度网盘网页版入口 百度网盘网页版官方登录网址
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
Golang如何优雅处理error_Golang error处理最佳实践总结
AO3官网镜像链接 Archive of Our Own同人文在线浏览
PHP表单数据传递:如何通过隐藏输入字段获取动态ID
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
利用5118提升短视频内容效果_5118短视频关键词优化方法
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
优化Log4j2控制台输出性能:解决异步日志瓶颈
将HTML动态表格多行数据保存到Google Sheet的教程
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析
微信网页版扫码登录入口 微信网页版二维码登录入口
163邮箱登录密码 163邮箱忘记密码找回
QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口
海量存储:机器视觉智能化的核心基石
J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
汽水音乐在线解析 汽水音乐在线解析入口
Golang如何使用net/url解析URL_Golang URL解析与处理方法
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作
在React函数组件中利用原生HTML5进行邮箱地址验证
CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示
J*aScriptWebpack优化_J*aScript构建工具实战
如何有效阻止外部脚本意外修改内联样式的高度属性
J*a编写用户注册与登录功能_掌握字符串与验证逻辑
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
高德地图沿途添加点失败如何解决 高德多点规划方法
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
Web Components中自定义开关组件状态同步的常见陷阱与解决方案


2025-12-15
浏览次数:次
返回列表
行结果)