3

我正在开发一个 ASP.NET MVC4 Web 应用程序。它使用实体框架进行数据访问。许多页面包含网格。这些需要支持分页、排序、过滤和分组。为了性能,需要在数据库上进行网格过滤、排序、分页等(即实体框架需要生成合适的 SQL 查询)。一种复杂的情况是,表示网格行的视图模型是通过组合来自多个业务实体(表)的数据来构建的。这可能只是简单地从一个实体向下获取数据,或者通过基于相关业务实体的值来计算它。建议使用什么方法来处理这种情况?有谁知道网络上的一个很好的例子?大多数在视图模型和业务域模型之间都有一个简单的映射。

更新 28/11 - 进一步阐明网格的初始显示和分页工作表现良好。(见下面的评论)问题是当用户单击的列没有直接映射到基础业务表上的列时,您如何处理排序/排序(和过滤)。我正在寻找一个通用的解决方案来实现这一点,因为系统将有大约 100 个网格,每个网格有许多列,并且试图在每列的基础上处理这个问题将是不可维护的。

4

1 回答 1

0

如果您希望能够订购未在数据库中预先计算的计算字段或对其执行任何数据库操作,那么您将必须预先计算该值并将其存储在数据库中。反正我不知道。

唯一的其他解决方案是将分页和排序等移动到 Web 服务器,我相信您并不想这样做,因为您必须计算所有值才能找到它们的顺序。

因此,如果您想实现您想要的 - 我认为您必须执行以下操作,但我很乐意听到其他解决方案:

数据库级别更改:

  1. 为视图模型中的每个计算字段添加一个可空列。

  2. 编写一个 SQL 脚本来计算这些值。

  3. 如有必要,将列设置为 Not Null

应用级别更改:

  1. 在您的添加和编辑页面中,您必须计算这些值并将它们与其余数据一起提交

您现在可以在数据库级别对这些进行查询,并根据需要使用 Queryable。

于 2012-11-28T16:26:05.863 回答