确定通用服务搜索方法的缓存密钥

时间:2015-11-09 19:43:32

标签: c# asp.net-mvc generics caching repository

我正在建立一个网站,我开始使用Domain / DAL /您想要调用它的层,并使用模型/存储库/服务结构。我创建了通用存储库基类,它负责我所有的CRUD功能。我还有一个通用服务,现在它只是存储库的一个包装器,但也负责缓存。

我遇到的问题是我的存储库有一个GetWhere方法,该方法使用一个谓词,允许我根据特定条件获取实体。当我进行研究时,这似乎是一种非常常见的方法。该服务也接受此谓词,然后将其传递到存储库。

我遇到的问题是,在服务方法中,我需要提出一个基于谓词中搜索内容的缓存键,但我不确定这是如何完成的,即使是我可以在这个阶段获得这些信息。

这是我的代码。

存储库方法:

public IQueryable<T> GetWhere(Expression<Func<T, bool>> predicate)
{
    return Context.Set<T>().Where(predicate);
}

服务方式:

public IQueryable<T> GetWhere(Expression<Func<T, bool>> predicate)
{
    var cacheKey = "Football." + predicate.Parameters[0].Type.Name + "." + ???;
    var result = cache.Get(cacheKey, () =>
    {
        var dbResult = repository.GetWhere(predicate);
        return dbResult;
    });
    return result;
}

所以我需要的是知道应该用什么代替&#34; ???&#34;这样我就可以创建一个代表我试图检索的缓存键,这样如果我调用我的服务方法就像这样:

teamService.GetWhere(x => x.Name.Contains("Test"));

...我得到的缓存键类似于&#34; Football.Team.Name.Test&#34;什么的。

如果我接近错误的方式,请告诉我,我觉得我可能会这样。

0 个答案:

没有答案