NHibernate - отображение коллекции через внешний ключ не-PK - PullRequest
0 голосов
/ 16 марта 2012

Хорошо, не спрашивайте почему, но у нас есть требование для следующей структуры категорий:

  1. Коллекция системных корневых категорий (для них мы используем перечисление)
  2. Набор пользовательских подкатегорий, каждая с внешним ключом идентификатора корневой категории
  3. Набор системных подкатегорий

Итак,это выглядит примерно так:

Sys-определенная корневая категория -> пользовательская подкатегория -> sys-определенная конечная категория -> item

Нам нужно загрузить предопределенныйкатегории на основе корневой категории подкатегории.Например, если бы у нас было:

Транспортные средства -> My Mondeo -> [Wheels, Stereo, Dashboard]

Пользовательский подкат «My Mondeo» будет выбирать дочерние категории на основев его корневой категории (Транспортные средства).

Таким образом, у нас происходит обратное отношение многих ко многим:

rootCats --1---------0..*-- user-defined cats
   |                                |
   1                               0..n
   |                                |
   |                                |
   |                                |
  0..*                              |
   |                                |
pre-defined cats--1------------------

Я попытался сопоставить это в nhibernate со следующими:

<set name="PreDefinedSubCategories" lazy="false" cascade="none" mutable="false">
  <key column="vaultCategoryId" property-ref="Category" />
  <one-to-many class="PreDefinedVaultCategory" />
</set>

Однако атрибут property-ref устарел и в любом случае выдает ошибку «коллекция не связана ни с одним сеансом».

Кто-нибудь реализовал что-то подобное с помощью nhibernate.Если так, есть ли хороший способ сделать это, или я должен просто определить метод, чтобы фильтровать ВСЕ листовые кошки после того, как они загрузились?

1 Ответ

0 голосов
/ 16 марта 2012

Полагаю, вы не можете использовать атрибут where = "" отображения коллекции, если только он не принимает параметры (я сомневаюсь, что это так)

Возможно, вам следует перейти к:

  • aмногие-к-одному из вашей пользовательской категории в корневую категорию
  • коллекция (один-ко-многим) из корневой категории в вашу подкатегорию Таким образом, вы можете иметь userCategory.rootCategory.subsubCategories

Я предполагаю, что есть также таблица взаимосвязей между вашими пользовательскими категориями и вашими подкатегориями (выбранными из доступных подкатегорий корневой категории). Затем перейдите к коллекции (многие-в-многих) из ваших пользовательских категорий в ваши подкатегории

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