我有这种方法从我的上下文中检索结果并使用MemoryCache
缓存它。
public IEnumerable<CustomerRole> GetCustomerRoles()
{
string key = String.Format(CC_CACHE_CUSTOMER_ROLE_ALL, "all");
return _cacheManager.Get(key, () =>
{
return from r in _customerRoleRepository.Table select r;
}
);
}
然后我在我的视图中使用它,如
@foreach (CustomerRole role in Model)
{
}
我遇到的问题是因为在访问数据之前不会执行实际结果(在我看来),它实际上并没有缓存结果。
如何强制此查询通过我的缓存功能运行,而不是等到数据被使用?
我没有包含_cacheManager.Get()
所做的事情,因为我知道它正在缓存我发送给它的任何内容,但如果您认为这是问题,请告诉我,我会发布相关代码。
注意:我试过这样做希望它会强制查询运行但仍然没有运气
public IEnumerable<CustomerRole> GetCustomerRoles()
{
string key = String.Format(CC_CACHE_CUSTOMER_ROLE_ALL, "all");
return _cacheManager.Get(key, () =>
{
var roles = from r in _customerRoleRepository.Table select r;
return roles.Take(roles.Count());
}
);
}
答案 0 :(得分:2)
您需要调用类似ToList()的方法来强制linq获取数据。然后只需将该列表添加到缓存中。