0

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

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

我们尝试了关闭和不关闭 ProxyCreationEnabled。

我只是碰巧知道我们正在加载的数据库不是很大,不会经常更改,并且被大量引用。因此,将其全部保存在内存中将是非常有利的。

4

2 回答 2

4

不,LazyLoadingEnabled禁用并不意味着“EagerLoadingEnabled”。它是:“甚至没有启用延迟加载,仅加载您明确请求的内容”。EF 上下文永远不会自动进行预加载。试想一下实体和大型数据库之间的许多关联会发生什么。

除非您使用仅访问本地实体的方法,否则您不会从将所有内容预加载到您的上下文中获得太多好处。DbSet.Local您可以通过或访问本地实体DbSet.Find

无论如何,只要访问DbSet(like context.Customers) 就会执行数据库查询。如果延迟加载被禁用,它可能会使用本地实体作为导航属性(称为关系修复),但访问导航属性也会导致数据库查询。

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

于 2013-03-27T20:56:00.937 回答
0

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

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

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

于 2013-03-27T18:30:30.813 回答