【发布时间】:2012-11-26 13:53:32
【问题描述】:
我正在开发一个 ASP.NET MVC4 Web 应用程序。它使用实体框架进行数据访问。许多页面包含网格。这些需要支持分页、排序、过滤和分组。为了性能,需要在数据库上进行网格过滤、排序、分页等(即实体框架需要生成合适的 SQL 查询)。一种复杂的情况是,表示网格行的视图模型是通过组合来自多个业务实体(表)的数据来构建的。这可能只是简单地从一个实体向下获取数据,或者通过基于相关业务实体的值来计算它。建议使用什么方法来处理这种情况?有谁知道网络上的一个很好的例子?大多数在视图模型和业务领域模型之间都有一个简单的映射。
28/11 更新 - 进一步明确网格的初始显示和分页工作表现良好。 (见下面的评论)问题是当用户单击的列没有直接映射到基础业务表上的列时,您如何处理排序/排序(和过滤)。我正在寻找一个通用的解决方案来实现这一点,因为系统将有大约 100 个网格,每个网格有许多列,并且试图在每列的基础上处理这个问题是不可维护的。
【问题讨论】:
-
让我看看我和你在一起......你想将多个业务实体映射到一个 ViewModel,那么你将有一个 IEnumberable
来表示视图中的一个网格? -
是的,在返回 IQueryable
的服务层上执行搜索。这样做是为了可以执行进一步的过滤/排序/分页,例如网格。当枚举结果时,它们被选入 ViewModelClass。这个类通常只是扁平化业务领域类。但它可以具有计算/组合字段。这导致实体框架生成性能良好的查询。我正在寻找有关处理对这些视图模型列进行排序/过滤的建议/示例,这些列会导致对数据库的查询。 -
好吧,我会尽快回复。
标签: asp.net-mvc entity-framework viewmodel