实体框架缓存vs Context.Items
问题描述:
我最近开始使用EF4.3。实体框架缓存vs Context.Items
我有一些数据,我得到每个请求 - 页面配置数据是一个例子。我从数据库中获取这些数据。
直到最近我一直在Context.items
存储这个,因为它允许我坚持这个数据贯穿请求。
我现在的问题是,现在我使用EF跟踪(我使用它在每个请求的基础上),理论上页面配置应该缓存时,它是第一次获取,所以任何后续调用它应该更便宜,尽管可能不能与context.items
相比。
这是这种情况还是我错过了什么?
答
如果使用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)....;
感谢结算,最多的情况。 – dotnetnoob