启用 EF Core 延迟加载需安装 Microsoft.EntityFrameworkCore.Proxies 包,实体导航属性标记为 virtual,并在 DbContext 配置中调用 UseLazyLoadingProxies(),即可实现访问时自动加载关联数据。

在 C# 中使用 EF Core 的延迟加载(Lazy Loading),需要通过配置代理来实现。延迟加载意味着导航属性在首次访问时才从数据库中加载,而不是在主查询时一并加载。
启用延迟加载的前提条件
要使用延迟加载代理,必须满足以下几点:
导航属性必须是 virtual需要安装 EF Core 的延迟加载代理 NuGet 包在 DbContext 配置中启用延迟加载
1. 安装延迟加载代理包
Install-Package Microsoft.EntityFrameworkCore.Proxies
这是 EF Core 官方提供的代理生成包,用于支持延迟加载功能。
2. 实体类中定义 virtual 导航属性
确保你的导航属性(如集合或引用类型)标记为 virtual,这样代理才能重写它们以实现延迟加载。
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection Posts { get; set; } = new List();
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
3. 在 DbContext 中启用代理和延迟加载
在 OnConfiguring 或 Startup.cs(ASP.NET Core)中配置上下文时,使用 UseLazyLoadingProxies() 方法。
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());
4. 使用示例
现在你可以像平常一样查询实体,导航属性会在访问时自动加载。
using var context = new YourContext();
var blog = context.Blogs.FirstOrDefault(b => b.Id == 1); // 此时不会加载 Posts
// 当访问 Posts 时,才会触发数据库查询
foreach (var post in blog.Posts)
{
Console.WriteLine(post.Title);
}
注意事项
延迟加载可能引发性能问题(N+1 查询),在循环中频繁访问导航属性时要小心如果上下文已释放(Disposed),再访问导航属性会抛出异常延迟加载不适用于静态属性或非 virtual 属性在序列化对象(如返回 JSON)时,注意避免意外触发加载或循环引用
基本上就这些。只要装对包、设对 virtual、开对选项,EF Core 的延迟加载代理就能自动工作。
以上就是C#中如何使用EF Core的查询延迟加载代理?如何启用?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1440538.html
微信扫一扫
支付宝扫一扫