Как отобразить свойство SampleCount с помощью NHibernate - PullRequest
0 голосов
/ 24 февраля 2010

У меня есть две таблицы - Run и Sample, где Sample.RunId - внешний ключ, связывающий образцы с их прогонами.

Я хотел бы иметь свойство SampleCount в Run, которое представляет собой число объектов Sample, связанных с конкретным Run.

Можно ли отобразить такое свойство в отображении NHibernate типа Run?

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 февраля 2010

Несмотря на то, что решение по сбору Диего Миджелсона является абсолютно верным, оно означает дополнительный запрос после извлечения сущности Run. Если вы не сопоставили коллекцию и не хотите или не хотите дополнительный запрос, рассмотрите свойство «computed» как таковое

в классе отображения Run

<property name="SamplesCount" type="long" formula="(select count(s.Id) from Samples s where s.RunId = Id)" />

и в классе Run просто добавьте

long SamplesCount {get; set;}

Обратите внимание, что в запросе для части "s.RunId = Id" NHibernate вставит правильный псевдоним для корневой таблицы. Кроме того, не забывайте скобки, это облегчает синтаксический анализатор и в некоторых случаях требуется.

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

1 голос
/ 24 февраля 2010

Хотя вы можете сделать это с помощью <join>, это не очень хорошая идея.

Вместо этого, объявите вашу Run.Samples коллекцию как lazy="extra", и доступ к Run.Samples.Count сделает запрос для подсчета вместо загрузки всей коллекции.

...