automapper + lazy loading + mvc contrib grid + s#arp repositories

时间:2010-07-15 08:10:12

标签: asp.net-mvc asp.net-mvc-2 automapper s#arp-architecture

我正在使用漂亮的#arp存储库和分页扩展方法加上这样的排序:

public ViewResult Index(int? page, GridSortOptions sort) 
        {
            ViewData["sort"] = sort;

            if (!string.IsNullOrEmpty(sort.Column))
            {
                return View(this.LabService.GetAllLabs().OrderBy(sort.Column, sort.Direction).AsPagination(page ?? 1, 10));
            }

...

我的第一个问题是:

(1)在分页之前必须完成排序并且所有这些都使用延迟加载(即内部使用TOP n或实际SQL中的某些内容)是否正确?

当前mvc contrib grid实现的一个缺点是它不允许对自定义列进行排序(例如组合列值),如下所示:

String.Format("{0} {1}", lab.Proposer.LastName, lab.Proposer.FirstName)

(在视图中使用)

我试图在相当简单的s#arp解决方案中避免使用视图模型,但在这种情况下我可以使用视图模型来允许按自定义列进行排序。

我曾使用automapper将域模型映射到视图模型,反之亦然。但是,我对此解决方案存在一个问题。这仍然可以使用延迟加载吗?

换句话说,在它可以进行排序和分页导致性能下降之前,automapper不必先将所有域对象映射到视图对象吗?

我希望这是有道理的,你明白我的意思。感谢。

祝福,

基督教

1 个答案:

答案 0 :(得分:-1)

  1. 是的,在分页之前必须进行排序和查询(其中某些东西= bla bla),实际上只有在你编写sql时你才需要关心这个,否则如果你使用hibernate或linq2sql或类似的东西你不要“T

  2. 所有的automapper正在做的是从一个对象获取值并将其放入另一个对象(涉及一些数据转换,配置和所有这些东西),除非你在自定义值解析器中写一些东西,你可以基本上写任何东西,然后你可以将这个值解析器用于某些特定的属性

  3. 干杯