我最近开始使用EF4.3。
我为每个请求提供了一些数据 - 页面配置数据就是一个例子。我从数据库中获取这些数据。
直到最近我才将其存储在Context.items
中,因为它允许我在整个请求中保留此数据。
我的问题是,现在我正在使用EF跟踪(我在每个请求的基础上使用它),理论上,页面配置应该在首次提取时进行缓存,因此任何后续调用都应该虽然可能与context.items
无法比较,但价格便宜。
是这种情况还是我错过了什么?
答案 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)....;