实体框架缓存与Context.Items

时间:2012-09-12 09:15:27

标签: .net entity-framework

我最近开始使用EF4.3。

我为每个请求提供了一些数据 - 页面配置数据就是一个例子。我从数据库中获取这些数据。

直到最近我才将其存储在Context.items中,因为它允许我在整个请求中保留此数据。

我的问题是,现在我正在使用EF跟踪(我在每个请求的基础上使用它),理论上,页面配置应该在首次提取时进行缓存,因此任何后续调用都应该虽然可能与context.items无法比较,但价格便宜。

是这种情况还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果使用ObjectSet/DbSet查询数据,即使您之前查询过相同的数据,也会始终访问数据库。您必须使用不同的查询技术从缓存项中获取数据。

如果您使用的是DbContext/DbSet API,则可以使用。

查询缓存
var items = dbContext.Products.Local.Where(/**/);

如果是ObjectContext

var items = objectContext.ObjectStateManager
        .GetObjectStateEntries(EntityState.Unchanged | EntityState.Added | EntityState.Modified)
        .Where(e => e.Entity is Product)....;