急切地加载DbContext中的所有实体

时间:2013-03-27 18:11:54

标签: entity-framework ef-code-first

有没有办法配置DbContext以急切加载其所有实体?我们尝试过:

        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;

我们尝试关闭和关闭ProxyCreationEnabled。

我碰巧知道我们加载的数据库不是很大,不经常更改,并且引用了很多。所以把它全部留在记忆中将是非常有利的。

2 个答案:

答案 0 :(得分:2)

不,LazyLoadingEnabled禁用并不代表“EagerLoadingEnabled”。它是:“甚至没有启用 lazy 加载,只加载显式请求”。 EF上下文永远不会自动执行急切加载。试想一下实体和大型数据库之间的许多关联会发生什么。

除非您使用方法仅访问本地实体,否则将所有内容预加载到上下文中都不会带来太多好处。您可以DbSet.LocalDbSet.Find访问本地实体。

只需访问DbSet(如context.Customers)即可执行数据库查询。如果禁用延迟加载,它可能会使用本地实体进行导航属性(称为关系修正),但访问导航属性也会导致数据库查询。

听起来您应该使用上下文从数据库填充对象图,并将其缓存在上下文之外。请注意,如果您以只读方式获取数据,则可能需要使用AsNoTracking扩展方法。 (如context.Customers.AsNoTracking())。

答案 1 :(得分:0)

没有...但是如果您正在寻找将批量数据加载到EF DbContext中的最高性能方法,我建议编写一个返回多个结果集的存储过程(每个实体类型一个)。当实体加载到上下文中时,EF将自动挂钩导航属性。

以下是有关如何从数据库优先和代码优先两个角度进行操作的说明:

http://msdn.microsoft.com/en-us/data/jj691402.aspx