在实体框架中,嵌套实体
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
感谢评论@V.S 的帮助
我确信实体框架默认执行延迟加载...但事实并非如此。
所以有两个解决方案:
最好的一种是使用提前加载(请参阅加载相关实体)。所以我更换了这一行:
commandeArticles = vdsysDbContext.CommandeArticles;
由
commandeArticles = vdsysDbContext.CommandeArticles.Include(x => x.Article).ToList();
或者通过启用相关数据的延迟加载
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLazyLoadingProxies()
.UseSqlServer(myConnectionString);