【问题标题】:Grid sorting based on properties on the view model基于视图模型上的属性的网格排序
【发布时间】:2012-11-26 13:53:32
【问题描述】:

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

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

【问题讨论】:

  • 让我看看我和你在一起......你想将多个业务实体映射到一个 ViewModel,那么你将有一个 IEnumberable 来表示视图中的一个网格?
  • 是的,在返回 IQueryable 的服务层上执行搜索。这样做是为了可以执行进一步的过滤/排序/分页,例如网格。当枚举结果时,它们被选入 ViewModelClass。这个类通常只是扁平化业务领域类。但它可以具有计算/组合字段。这导致实体框架生成性能良好的查询。我正在寻找有关处理对这些视图模型列进行排序/过滤的建议/示例,这些列会导致对数据库的查询。
  • 好吧,我会尽快回复。

标签: asp.net-mvc entity-framework viewmodel


【解决方案1】:

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

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

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

数据库级别更改:

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

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

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

应用级别更改:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多