Свободный NHibernate: что лучше ... выбирать из представления или выполнять соединения для извлечения значений MIN и MAX из связанной таблицы? - PullRequest
0 голосов
/ 31 августа 2011

Отказ от ответственности: я довольно новичок в NHibernate / Fluent NHibernate.

У меня есть таблица событий:

ID UniqueIdentifier,
Name varchar(100),
Details varchar(MAX)
....

У меня также есть справочная таблица, в которой указаны места событий:

ID UniqueIdentifier,
StartDate datetime,
EndDate datetime,
City varchar(100)
....

Что я хочу сделать, так это вернуть значения MIN (StartDate) и MAX (EndDate) из моей таблицы местоположений при возврате списка моих событий.

Теперь, традиционно, я создавал бы представление в SQL для своей таблицы событий, которая возвращала бы эти агрегированные значения. Насколько я понимаю, если бы я делал это при использовании NHibernate, мне нужно было бы создать две карты Fluent, одну для просмотра (которая ссылается на мое представление SQL) и одну для вставки / редактирования, которая ссылается на мою таблицу.

Я прав?

Другой вариант, о котором я думал, это то, что в моем отображении Fluent я мог бы каким-то образом выполнять совокупные функции MIN и MAX для таблицы связанных местоположений.

Какой метод предпочтительнее, и как мне поступить, выполняя задачу?

Спасибо - Джоэл

1 Ответ

2 голосов
/ 31 августа 2011

если min и max для определенных событий, вы можете отобразить это как:

Map(x => x.MaxDate).Formula("(SELECT MAX(EndDate) FROM locations l WHERE l.ID = ID)");
Map(x => x.MinDate).Formula("(SELECT MIN(StartDate) FROM locations l WHERE l.ID = ID)");

Примечание: эти свойства доступны только для чтения (никогда не записываются)

если это должно быть глобальное использование фьючерсов (3 запроса, выпущенные как одна поездка туда и обратно)

var mindate = session.QueryOver().FutureValue();
var maxdate = session.QueryOver().FutureValue();
var events = session.QueryOver().Future();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...