我正在开发一个ASP.NET MVC4 Web应用程序。它使用实体框架进行数据访问。许多页面都包含网格。这些需要支持分页,排序,过滤和分组。为了提高性能,需要在数据库上进行网格过滤,排序,分页等(即实体框架需要生成合适的SQL查询)。一个复杂因素是表示网格行的视图模型是通过组合来自多个业务实体(表)的数据构建的。这可以简单地从实体中获取几个级别的数据,或者通过基于相关业务实体的值来计算它。建议采用什么方法来处理这种情况?有谁知道网上有一个很好的例子?大多数都在视图模型和业务领域模型之间有一个简单的映射。
更新28/11 - 为了进一步阐明网格的初始显示和寻呼工作表现良好。 (请参阅下面的注释)问题是当用户单击的列不直接映射到基础业务表的列时,如何处理排序/排序(和过滤)。我正在寻找实现这一目标的一般解决方案,因为系统将有大约100个网格,每个网格有多个列,并且尝试按列进行处理将无法维护。
答案 0 :(得分:0)
如果您希望能够订购数据库中未预先计算的计算字段或对其执行任何数据库操作,那么您将不得不预先计算该值并将其存储在数据库中。我无论如何都不知道。
唯一的另一个解决方案是将分页和排序等移动到Web服务器,我相信你真的不想那样做,因为你必须计算所有值才能找到它们进入的顺序。 / p>
所以,如果你想达到你想要的效果 - 我认为你必须做到以下几点,我很乐意听到其他解决方案:
数据库级别更改:
为视图模型中的每个计算字段添加一个可为空的列。
编写一个SQL脚本来计算这些值。
如有必要,将列设置为非空
应用级别更改:
您现在可以在数据库级别查询这些内容,并根据需要使用Queryable。