我有这个代码来显式加载实体:
dbContext.StorageRequests.Add(storageRequest);
dbContext.SaveChanges();
//Here I want to explict loading some navigation properties
dbContext.Entry(storageRequest).Reference(c => c.Manager).Load();
dbContext.Entry(storageRequest).Reference(c => c.Facility).Load();
dbContext.Entry(storageRequest).Collection(x=> x.PhysicalObjects).Query().Include(x => x.Classification).Load();
我的问题是两部分:
第一个我怎样才能一起加载(我想调用一次 Load() )?
第二部分 上面的代码是否为每个 Load() 调用发送查询,然后依次访问数据库以加载相关数据?
我对EF核心有类似的问题。打开调试输出窗口的 SQL 日志记录帮助回答了我关于它在做什么以及为什么这样做的很多问题。就你的问题而言:
1) 你不能,尽管你可以用一系列dbContext.Collection.Include(otherCollection).ThenInclude(stuffRelatedToOtherCollection)
类型链来急切地加载它
2) 是的,即使在一个 c# 语句中急切加载也会导致多个查询。我认为这是因为除了最简单的多 SQL 之外,其他任何方式都无法解决复杂的人工智能问题,因为当多个表在一个矩形数据集中连接在一起时,框架很难处理笛卡尔积。(一所学校有学生和老师,老师:学生是多:多的关系,按班级分解。如果你写一个查询加入学校,班级,学生和老师,你会得到到处都是重复的数据,尽管在概念上可以通过它寻找唯一的学校,班主任和学生的主键值,您可能会下载数以万计的重复行,但必须再次将它们全部唯一。EF倾向于选择学校,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句