我正在建立一个网站,我开始使用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;什么的。
如果我接近错误的方式,请告诉我,我觉得我可能会这样。