0

0

EF Core延迟加载怎么用 EF Core Lazy Loading配置方法

月夜之吻

月夜之吻

发布时间:2025-12-25 10:37:49

|

265人浏览过

|

来源于php中文网

原创

ef core 默认不启用延迟加载,需安装 microsoft.entityframeworkcore.proxies 包、调用 uselazyloadingproxies() 启用代理、并将导航属性声明为 virtual;替代方案是通过 ilazyloader 注入实现无代理延迟加载,但推荐优先使用 include/theninclude 显式加载以避免 n+1 问题。

ef core延迟加载怎么用 ef core lazy loading配置方法

EF Core 默认不启用延迟加载,要用它得手动配三样东西:装包、启代理、标 virtual。核心就一句话——访问导航属性时才查数据库,但容易引发 N+1 查询,生产环境慎用

安装 Microsoft.EntityFrameworkCore.Proxies 包

这是启用延迟加载的前提,没有它,UseLazyLoadingProxies() 方法根本不存在。

  • 用 NuGet 命令安装:Install-Package Microsoft.EntityFrameworkCore.Proxies
  • 或在 .csproj 文件中添加引用:<packagereference include="Microsoft.EntityFrameworkCore.Proxies" version="8.0.10"></packagereference>(版本建议匹配你当前 EF Core 版本)

在 DbContext 中启用代理支持

必须显式调用 UseLazyLoadingProxies(),否则即使实体标了 virtual 也无效。

  • OnConfiguring 中配置(适合简单场景):

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)<br>{<br>  optionsBuilder<br>    .UseSqlServer("YourConnectionString")<br>    .UseLazyLoadingProxies();<br>}

  • 在 ASP.NET Core 的 Program.csStartup.cs 中配置(推荐):

builder.Services.AddDbContext<AppDbContext>(options =><br>  options.UseSqlServer(connectionString)<br>    .UseLazyLoadingProxies());

Supercreator
Supercreator

AI视频创作编辑器,几分钟内从构思到创作。

下载

实体导航属性必须声明为 virtual

EF Core 需要通过运行时生成代理子类来拦截属性访问,只有 virtual 成员才能被重写。

  • 集合导航属性示例:public virtual ICollection<post> Posts { get; set; }</post>
  • 引用导航属性示例:public virtual Blog Blog { get; set; }
  • 注意:不能是 private setinit,getter/setter 都得可重写;初始化如 = new List<post>()</post> 可以保留,不影响延迟逻辑

替代方案:不用代理也能延迟加载(ILazyLoader 注入)

适合不想依赖代理、或需更精细控制加载时机的场景。原理是把加载逻辑交给构造函数注入的 ILazyLoader 实例。

  • 实体需提供带 ILazyLoader 的构造函数,并用它加载私有字段:

public class Blog<br>{<br>  private readonly ILazyLoader _lazyLoader;<br>  private ICollection<Post> _posts;<br><br>  public Blog(ILazyLoader lazyLoader) => _lazyLoader = lazyLoader;<br><br>  public virtual ICollection<Post> Posts<br>    => _lazyLoader.Load(this, ref _posts);<br>}

  • 该方式无需 virtual 属性(但仍需 virtual getter 以支持代理机制兼容),也不依赖动态代理,更可控,但代码稍多

基本上就这些。配置不复杂但容易忽略细节,比如漏装包、忘加 virtual、或在上下文已释放后访问导航属性导致异常。真要兼顾性能和可维护性,多数场景建议优先用 Include + ThenInclude 显式加载。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

125

2025.11.27

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

768

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

25

2025.12.06

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

382

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2106

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

357

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

259

2023.09.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

4

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 77.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号