小编mat*_*att的帖子

存储库是否应将IQueryable暴露给服务层或在实现中执行过滤?

我正在尝试在我的MVC应用程序中决定数据访问的最佳模式.目前,在遵循MVC店面系列之后,我正在使用存储库,将IQueryable暴露给服务层,然后服务层应用过滤器.最初我一直在使用LINQtoSQL

public interface IMyRepository
{
  IQueryable<MyClass> GetAll();
}
Run Code Online (Sandbox Code Playgroud)

实施于:

public class LINQtoSQLRepository : IMyRepository
{
   public IQueryable<MyClass> GetAll()
   {
      return from table in dbContext.table
             select new MyClass
             {
                Field1 = table.field1,
                ... etc.
             }
   }
}
Run Code Online (Sandbox Code Playgroud)

过滤ID:

public static class TableFilters 
{       
   public static MyClass WithID(this IQueryable<MyClass> qry, string id)
   {
      return (from t in qry
              where t.ID == id
              select t).SingleOrDefault();
   }     
}
Run Code Online (Sandbox Code Playgroud)

从服务中调用:

public class TableService
{
   public MyClass RecordsByID(string id)
   {
      return _repository.GetAll()
                        .WithID(id);
   }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用带有LINQ …

linq-to-entities iqueryable repository-pattern linq-to-sql

11
推荐指数
1
解决办法
2297
查看次数