automapper + ленивая загрузка + mvc contrib grid + репозиторий s#arp

Я использую хорошие репозитории s#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 сопоставлять ВСЕ объекты домена с объектами представления, прежде чем он сможет выполнять сортировку и разбиение по страницам, что приводит к снижению производительности?

Я надеюсь, что это имеет смысл, и вы понимаете, к чему я клоню. Спасибо.

С наилучшими пожеланиями,

христианин


person cs0815    schedule 15.07.2010    source источник


Ответы (1)


  1. Да, сортировка и запросы (где что-то = бла-бла) должны быть выполнены до пейджинга, на самом деле вам нужно заботиться об этом, только если вы пишете sql, в противном случае, если вы используете спящий режим или linq2sql или что-то подобное, чем вы не

  2. все, что делает automapper, это берет значения из одного объекта и помещает их в другой объект (есть некоторое преобразование данных, конфигурация и все такое), если вы не пишете что-то в пользовательском преобразователе значений, где вы можете в основном написать что-нибудь и после того, как вы может использовать этот valueresolver для некоторого конкретного свойства

Ваше здоровье

person Omu    schedule 16.07.2010