有没有办法配置DbContext以急切加载其所有实体?我们尝试过:
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
我们尝试关闭和关闭ProxyCreationEnabled。
我碰巧知道我们加载的数据库不是很大,不经常更改,并且引用了很多。所以把它全部留在记忆中将是非常有利的。
答案 0 :(得分:2)
不,LazyLoadingEnabled
禁用并不代表“EagerLoadingEnabled”。它是:“甚至没有启用 lazy 加载,只加载显式请求”。 EF上下文永远不会自动执行急切加载。试想一下实体和大型数据库之间的许多关联会发生什么。
除非您使用方法仅访问本地实体,否则将所有内容预加载到上下文中都不会带来太多好处。您可以DbSet.Local
或DbSet.Find
访问本地实体。
只需访问DbSet
(如context.Customers
)即可执行数据库查询。如果禁用延迟加载,它可能会使用本地实体进行导航属性(称为关系修正),但访问导航属性也会导致数据库查询。
听起来您应该使用上下文从数据库填充对象图,并将其缓存在上下文之外。请注意,如果您以只读方式获取数据,则可能需要使用AsNoTracking
扩展方法。 (如context.Customers.AsNoTracking()
)。
答案 1 :(得分:0)
没有...但是如果您正在寻找将批量数据加载到EF DbContext中的最高性能方法,我建议编写一个返回多个结果集的存储过程(每个实体类型一个)。当实体加载到上下文中时,EF将自动挂钩导航属性。
以下是有关如何从数据库优先和代码优先两个角度进行操作的说明: