Sha*_*ean 17 asp.net-mvc repository-pattern asp.net-mvc-3
我们在asp.net存储库模式项目中将数据分页和排序的逻辑放在哪里?
它应该进入服务层还是放在控制器中并让控制器直接调用存储库?Controller - > Repository 在这里显示为jquery网格.
但与该文章不同,我的存储库返回 IQueryable<datatype>
RPM*_*984 25
如果您的存储库返回物化序列(ICollection<T>,List<T>)等,它应该进入存储库.
但是如果你的回归IQueryable<T>(就像我),我希望你有一个服务层在你的控制器和存储库之间进行调解,它在IQueryable上执行查询并将它们具体化为具体的集合.
所以,我会把分页放在服务层.
像这样的东西:
public PagedList<T> Find(Expression<Func<T,bool>> predicate, int pageNumber, pageSize)
{
return repository
.Find()
.Where(predicate)
.ToPagedList(pageNumber, pageSize);
}
Run Code Online (Sandbox Code Playgroud)
.ToPagedList可以是一个扩展方法,将您需要的分页和项目应用于a PagedList<T>.
那里有很多PagedList<T>实现.我喜欢Rob Conery的那个.具有View所需的属性,因此您可以绑定到a PagedList<T>并创建HTML Helper以非常轻松地呈现页码.任何分页列表LINQ实现的唯一问题是Count()需要在服务器上完成操作(对于记录数量),因此导致2次往返.
您不希望将非实现查询返回到View,因为IMO会破坏MVC模式.
每次转到新页面时,请致电您的服务以检索所需的结果.
| 归档时间: |
|
| 查看次数: |
11016 次 |
| 最近记录: |