我正在寻找一种可能的方法来启用延迟加载,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<…>()...;
- 1 回答
- 0 关注
- 316 浏览
添加回答
举报
0/150
提交
取消