Для достижения этих целей я создаю простой класс View, например CustomerView, который содержит только свойства, необходимые для отображения обзора.
Мой репозиторий затем имеет метод, который возвращает коллекцию этих объектов CustomerView.
Я в основном использую NHibernate в своих проектах. Nhibernate позволяет использовать «проекции».
Итак, что я делаю в своем хранилище:
(обратите внимание, что приведенный ниже код является просто псевдокодом; он не будет компилироваться).
public IList<CustomerView> GetAllCustomers()
{
ICriteria crit = _session.CreateCriteria (typeof(Customer));
crit.AddProjection ( ... );
crit.SetResultTransformer (new EntityToBeanTransformer(typeof(CustomerView));
return crit.ToList();
}
На самом деле все сводится к следующему: я говорю своему мапперу O / R, что он должен запрашивать клиентов, но он должен возвращать сущности типа 'CustomerView'.
В определении проекции я также определяю, какие свойства класса Customer соответствуют каким свойствам класса CustomerView.
Затем модуль O / R достаточно умен, чтобы сгенерировать очень простой запрос, который извлекает только те поля, которые необходимы для заполнения класса CustomerView.
Например, выполняемый запрос может быть таким простым:
SELECT customerid, customername FROM tblCustomer