预加载:
context.Cars.Include(c=>c.Orders)
显式加载:
context.Entry(c).Collection(x => x.Orders).Load();
预加载和显式加载有什么区别?难道只是语法差异,比如急切加载使用 Include
而显式加载使用 Load
吗?但是,使用 Include
不是也是“显式加载”吗? “加载导航属性的方式,那么为什么预加载不被视为与显式加载相同?
最佳答案
预加载与延迟加载相反,但显式加载与延迟加载类似,不同之处在于:您在代码中显式检索相关数据;当您访问导航属性时,它不会自动发生。
您可以通过获取实体的对象状态管理器条目并调用集合的 Collection.Load 方法或调用包含单个实体的属性的 Reference.Load 方法来手动加载相关数据。
EntityFramework 返回 IQueryable 对象,它本质上包含对数据库的查询。但这些直到第一次枚举时才会执行。
Load() 执行查询,以便将其结果存储在本地。 调用 Load() 与调用 ToList() 并丢弃该 List 相同,而无需创建 List 的开销。
关于c# - 预加载和显式加载之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57396599/