实体框架缓存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)....; 
+0

感谢结算,最多的情况。 – dotnetnoob