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