EF Core延迟加载怎么用 EF Core Lazy Loading配置方法
#技术教程 发布时间: 2025-12-25
EF Core 默认不启用延迟加载,需安装 Microsoft.EntityFrameworkCore.Proxies 包、调用 UseLazyLoadingProxies() 启用代理、并将导航属性声明为 virtual;替代方案是通过 ILazyLoader 注入实现无代理延迟加载,但推荐优先使用 Include/ThenInclude 显式加载以避免 N+1 问题。
EF Core 默认不启用延迟加载,要用它得手动配三样东西:装包、启代理、标 virtual。核心就一句话——访问导航属性时才查数据库,但容易引发 N+1 查询,生产环境慎用。
安装 Microsoft.EntityFrame
workCore.Proxies 包
这是启用延迟加载的前提,没有它,UseLazyLoadingProxies() 方法根本不存在。
- 用 NuGet 命令安装:
Install-Package Microsoft.EntityFrameworkCore.Proxies - 或在 .csproj 文件中添加引用:
(版本建议匹配你当前 EF Core 版本)
在 DbContext 中启用代理支持
必须显式调用 UseLazyLoadingProxies(),否则即使实体标了 virtual 也无效。
- 在
OnConfiguring中配置(适合简单场景):
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseSqlServer("YourConnectionString")
.UseLazyLoadingProxies();
}
- 在 ASP.NET Core 的
Program.cs或Startup.cs中配置(推荐):
builder.Services.AddDbContext(options =>
options.UseSqlServer(connectionString)
.UseLazyLoadingProxies());
实体导航属性必须声明为 virtual
EF Core 需要通过运行时生成代理子类来拦截属性访问,只有 virtual 成员才能被重写。
- 集合导航属性示例:
public virtual ICollectionPosts { get; set; } - 引用导航属性示例:
public virtual Blog Blog { get; set; } - 注意:不能是
private set或init,getter/setter 都得可重写;初始化如= new List可以保留,不影响延迟逻辑()
替代方案:不用代理也能延迟加载(ILazyLoader 注入)
适合不想依赖代理、或需更精细控制加载时机的场景。原理是把加载逻辑交给构造函数注入的 ILazyLoader 实例。
- 实体需提供带
ILazyLoader的构造函数,并用它加载私有字段:
public class Blog
{
private readonly ILazyLoader _lazyLoader;
private ICollection_posts;
public Blog(ILazyLoader lazyLoader) => _lazyLoader = lazyLoader;
public virtual ICollectionPosts
=> _lazyLoader.Load(this, ref _posts);
}
- 该方式无需
virtual属性(但仍需virtualgetter 以支持代理机制兼容),也不依赖动态代理,更可控,但代码稍多
基本上就这些。配置不复杂但容易忽略细节,比如漏装包、忘加 virtual、或在上下文已释放后访问导航属性导致异常。真要兼顾性能和可维护性,多数场景建议优先用 Include + ThenInclude 显式加载。
上一篇 : EF Core Required注解怎么用 EF Core非空约束设置方法
下一篇 : okok体脂秤app如何将公斤改市斤
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!
workCore.Proxies 包