相关疑难解决方法(0)

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

我正在寻找一种可能的方式来启用我的延迟加载,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();
    }
}
Run Code Online (Sandbox Code Playgroud)

并将它们分别作为依赖项注入。构造函数在传递DbContextOptions<MyLazyContext>给基本构造函数有一个问题,DbContextOptions<MyContext>因此我将它们都更改为DbContextOptions<MyContext>。尽管此方法在我的Web应用程序中有效,但由于我的通用类激活器的工作方式而导致单元测试失败DbContext-这使我认为该方法具有代码味道,因此我开始寻找更好的解决方案。

c# lazy-loading entity-framework-core asp.net-core

4
推荐指数
1
解决办法
1928
查看次数

EntityFramework:如何从数据库加载对象列表?

我有两个实体:

public class Booking
{
    [Key]
    public int Id { get; set; }

    public int RoomId { get; set; }
    [ForeignKey("RoomId")]
    public Room Room { get; set; }

    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string DocumentNumber { get; set; }
    public string ContactPhone { get; set; }
}

public class Room
{
    [Key]
    public int RoomId { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework

1
推荐指数
1
解决办法
2万
查看次数