实体框架嵌套实体未初始化

问题描述 投票:0回答:1

在实体框架中,嵌套实体

Commandes
Client
中使用时不会在
DbContext
类中初始化,但在另一个
DbSet

中使用时会初始化

  • 在我的
    Clients
    列表中1)我的第二个
    Client
    没有
    Commande
    2).
  • 但是在我的
    Commandes
    列表3)我的第一个
    Commande
    4)有一个
    Client
    Commande
    5)

它们在数据库中是相同的

Client
!这与这个问题不是同一实体...这有原因吗?这个问题有解决办法吗?


编辑:似乎根据我观看的顺序,结果有所不同:


编辑2:我使用

DbContext
进行依赖注入,如下所示:

public class LicencesService
{
    private VdsysDbContext vdsysDbContext;
    
    public LicencesService(VdsysDbContext dbContext)
    {
        vdsysDbContext = dbContext;
        commandeArticles = vdsysDbContext.CommandeArticles;
    }
}

当我检查变量

commandeArticles = vdsysDbContext.CommandeArticles;
时,我的断点位于线上
vdsysDbContext

c# entity-framework entity-framework-core
1个回答
0
投票

感谢评论@V.S 的帮助

我确信实体框架默认执行延迟加载...但事实并非如此。

所以有两个解决方案:

最好的一种是使用提前加载(请参阅加载相关实体)。所以我更换了这一行:

commandeArticles = vdsysDbContext.CommandeArticles;

commandeArticles = vdsysDbContext.CommandeArticles.Include(x => x.Article).ToList();

或者通过启用相关数据的延迟加载

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(myConnectionString);
© www.soinside.com 2019 - 2024. All rights reserved.