Как вы отображаете агрегатные функции в NHibernate? - PullRequest
3 голосов
/ 01 сентября 2009

Я новичок в NHibernate и пытаюсь создать свое первое отображение.

Я создал такой класс (мой пример упрощен):

public class Buyer
{
    public int BuyerID { get; set; }
    public string Name { get; set; }
    public decimal AverageOrderAmount { get; private set; }
    public DateTime LastOrderDate { get; private set; }
}

Обычно, чтобы получить эти данные из SQL Server, я написал бы запрос, используя агрегатные функции, такие как:

выберите b.BuyerID, b.Name,
avg (o.OrderTotal) как AverageOrderAmount, max (o.OrderDate) как LastOrderDate
от покупателей b
Объединить заказы o на o.BuyerID = b.BuyerID
где BuyerID = @ BuyerID
группа по b.BuyerID, b.Name

Мой вопрос: как мне сообщить об этом в моем отображении? Это возможно?

Я предположил, что могу сохранить эти рассчитанные значения в кабеле покупателей и пересчитать их при необходимости, но это не так.

1 Ответ

3 голосов
/ 01 сентября 2009

Из того, что я знаю, вы не можете отобразить это с помощью nhibernate. Сущность представляет таблицу (в большинстве случаев), то, что у вас есть, больше похоже на строки отчета.

Чтобы получить доступ к этому классу, я бы создал представление в базе данных, а затем создал бы отдельную сущность. При обычном использовании Buyer вам, вероятно, не всегда нужны AverageOrderAmount и LastOrderDate - я думаю, что вы используете это для отображения этой информации на интерфейсе, в этом случае вам следует создать и отобразить представление БД.

...