Entity Framework中如何一次性加载含多对多关联的多层级实体(T、TI、E、R)
解决方案:无需循环加载关联的E实体
当然可以不用循环来加载E实体!先梳理下你的实体关联逻辑:
- T 和 TI 是多对多关联
- TI 和 E 是一对多关联
- R 和 TI 是多对一关联
你之前的代码已经能正确加载T关联的TI、I和R实体,要同时加载E实体,只需要在查询中新增一条针对TIs->I->Es的Include链即可,不需要通过循环去逐个加载。
最终可行的查询代码如下:
var t = dbContext.T .Include(i => i.TIs) .ThenInclude(i => i.I) .ThenInclude(i => i.R) .Include(i => i.TIs) .ThenInclude(i => i.I.Es) .Single(i => i.Id == id);
为什么这么做?
在EF Core中,当你需要从同一个导航属性(这里是T.TIs)加载多个不同的关联分支时,需要分开编写Include语句。也就是说,不能在同一条Include链里同时指向I.R和I.Es,必须通过重复Include(i => i.TIs)来开启新的关联加载分支,这样就能一次性把所有需要的关联实体(包括E)都加载完成,避免了循环查询带来的性能问题。
内容的提问来源于stack exchange,提问作者Boppity Bop
相关产品推荐
相关产品推荐

