Как бы вы справились с этой ситуацией с помощью nHibernate? - PullRequest
0 голосов
/ 17 июня 2009

В моей базе данных есть 2 таблицы:

  • Категория
  • BlogEntry

Каждый BlogEntry имеет 1 или более Category s, связанных с ним.

Если я хочу получить BlogEntry по его идентификатору, я также хочу получить Category информацию.

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

Будет ли nHibernate загружать все столбцы / свойства для каждого объекта?

Ответы [ 3 ]

1 голос
/ 17 июня 2009

Я бы справился с этим, сопоставив его как однозначную связь между BlogEntry и Category, чтобы у BlogEntry была коллекция Category. Я бы установил так, чтобы коллекция Category была загружена ленивым. Мне было бы все равно, что я загружаю больше столбцов, чем буду отображать, потому что я работаю с бизнес-объектами и выбираю по первичному или внешнему ключу. Задача NHibernate - беспокоиться об этом, хотя я бы проверял это во время разработки с использованием SQL Profiler или NHProf.

NHibernate загрузит коллекцию, выбрав Категории записей, используя внешний ключ от BlogEntry. Практически во всех случаях выигрыш в производительности достигается только при возврате полей, которые вы будете отображать. Извлечение бизнес-объектов с необходимыми свойствами, заполненными на основе требований к отображению, не является хорошей объектно-ориентированной практикой.

0 голосов
/ 17 июня 2009

Вы хотели бы посмотреть в проекции. На самом деле мы используем преобразователь AliasToBean, чтобы NHibernate преобразовывал наши проекции непосредственно в экранное DTO.

0 голосов
/ 17 июня 2009

Это будет зависеть от того, как вы его отобразили. По-видимому, инструментарий битового кода позволяет получать только частичные таблицы, но это редко требуется.

Возможно, объяснение, почему вам нужен только идентификатор категории ...

Если вы определяете отображения гибернации и вместо того, чтобы иметь категорию, сущность, которая отображается на объект категории, просто имеет его как целое. Вот как я обрабатываю свои сопоставления, когда меня не волнует возможность извлечения вложений с моими исходными запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...