我正在寻找一种可能的方法来启用延迟加载,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- 这让我认为这种方法是代码异味,所以我开始寻找更好的解决方案。
慕容3067478
相关分类