存储库中的特定查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储库中的特定查询相关的知识,希望对你有一定的参考价值。

我一直在阅读有关存储库模式(Linq2SQL或EF)的大量内容。我已经看到了一些带有一些特定查询的存储库,例如FindUserByName,我将where表达式传递给存储库。

另一方面,我看到一些存储库只有“保存,更新和GetAll”,而GetAll返回IQueryable。并且,此IQueryable在服务层中进行过滤。

那么,在您看来,将特定查询传递给存储库还是让它更简单并让所有过滤器都在服务中是否合适?

谢谢!

答案

我的建议是创建一个GenericRepository<T>,它有核心基本方法(FindSaveDelete等)。

例:

public abstract class GenericRepository<T> : IRepository<T> where T : class
{
    public T FindSingle(Expression<Func<T,bool>> predicate) { .. };
    public IQueryable<T> Find() { .. };
    public void Delete(T entity) { .. };    
}

然后创建从泛型继承的特定存储库,以创建专门的方法。

例:

public class EmployeeRepository : GenericRepository<Employee>, IRepository<Employee>
{
   public Employee FindByLastName(string lastName)
   {
      return FindSingle(emp => emp.LastName == lastName);
   }

   public ICollection<Employee> FindAllManagers()
   {
      return Find().Where(emp => emp.Type == "Manager").ToList();
   }

   // other methods...
}

这意味着您不会在您的存储库中复制公共代码。

是的,另一种选择是让服务在GenericRepository<T>上运作。这意味着服务(基本上)是一个专门的存储库。

因此,如果您需要服务层或专用存储库,这只是一个偏好问题。

以上是关于存储库中的特定查询的主要内容,如果未能解决你的问题,请参考以下文章

ruby 我感兴趣的库中的代码片段

无法通过使用 Volley 库中的 Intent 从片段中移动下一个 Activity

GitHub:如何对存储库中的代码进行区分大小写的搜索?

具有连接的实体和存储库中的教义可重用标准

列出具有特定属性和值的 subversion 存储库中的所有路径

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项