为了账号安全,请及时绑定邮箱和手机立即绑定

EF Core 有条件地启用延迟加载

EF Core 有条件地启用延迟加载

C#
哆啦的时光机 2021-11-28 17:50:19
我正在寻找一种可能的方法来启用延迟加载,DbContext但并非总是如此,仅在需要时才在特定情况下启用。由于像 N+1 查询大数据集和 JSON 序列化遍历对象属性和序列化我的整个数据库等问题,我通常不想要延迟加载。但是,在某些情况下,我确实想要它。生成报告时,我加载一个顶级对象和许多子对象以填充报告字段。由于模式的性质,这将需要 30 个或更多,Include()并且ThenInclude()没有延迟加载的调用。有没有办法在查询时有条件地启用延迟加载?我尝试使用 2 DbContexts,一个扩展另一个并启用延迟加载,如下所示:public class MyLazyContext : MyContext{    public MyLazyContext(DbContextOptions<MyLazyContext> options) : base(options) { }    protected override OnConfiguring(DbContextOptionsBuilder optionsBuilder)    {        optionsBuilder.UseLazyLoadingProxies();    }}并将它们作为依赖项单独注入。构造函数在传递DbContextOptions<MyLazyContext>给需要的基本构造函数时出现问题,DbContextOptions<MyContext>因此我将它们都更改为DbContextOptions<MyContext>. 虽然这在我的 Web 应用程序中有效,但由于我的通用类激活器的工作方式,我的单元测试被破坏了DbContext- 这让我认为这种方法是代码异味,所以我开始寻找更好的解决方案。
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

您可以使用ChangeTracker.LazyLoadingEnabled属性:

获取或设置一个值,该值指示是否将在首次访问时加载被跟踪实体的导航属性。

默认值是true。

例如

context.ChangeTracker.LazyLoadingEnabled = false;
var query = context.Set<…>()...;


查看完整回答
反对 回复 2021-11-28
  • 1 回答
  • 0 关注
  • 316 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信