缓存EF的结果

时间:2014-02-13 16:51:40

标签: entity-framework caching

我有这种方法从我的上下文中检索结果并使用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());
        }
    );
}

1 个答案:

答案 0 :(得分:2)

您需要调用类似ToList()的方法来强制linq获取数据。然后只需将该列表添加到缓存中。