nHibernate Self Присоединиться Mapping - PullRequest
0 голосов
/ 11 мая 2010

Это, наверное, невероятно просто, но я просто не вижу древесину для деревьев в данный момент.

Для краткости я хотел бы смоделировать объект слова, который имеет связанные с ним слова (синонимы). При этом я мог бы иметь следующие сопоставления:

<class name="Word" table="bs_word">
<id name="Id" column="WordId" type="Int32" unsaved-value="-1">
  <generator class="native">
    <param name="sequence"></param>
  </generator>
</id>

<property name="Key" column="word" type="String" length="50" />
<many-to-one name="SynonymGroup" class="BS.Core.Domain.Synonym, BS.Core" column="SynonymId"  lazy="false"/>


<class name="Synonym" table="bs_Synonym">
<id name="Id" column="SynonymId" type="Int32" unsaved-value="-1">
  <generator class="native">
    <param name="sequence"></param>
  </generator>
</id>
<property name="Alias" column="Alias" type="String" length="50" />
<bag name="Words" cascade="none" lazy="false" inverse="true">
  <key column="SynonymId" />
  <one-to-many class="Word"  />
</bag>

Отображение так, как это будет означать для данного слова, я могу получить доступ к связанным словам (синонимам), как это:

word.SynonymGroup.Words

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

word.Words

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

та, kmoo01

1 Ответ

1 голос
/ 11 мая 2010

Это сопоставит сущность Word с набором слов (синонимов):

<class name="Word">
  <id ...>
    <generator .../>
  </id>
  <set name="Synonyms" cascade="all">
    <key />
    <many-to-many class="Word" />
  </set>
</class>

При необходимости вы можете настроить имена таблиц в элементах class и set и имена столбцов в элементах key и many-to-many.

Обратите внимание, что я использовал set вместо bag, так как он лучше соответствует семантике. Вы можете сопоставить его с ICollection<Word> или Iesi.Collections.Generic.ISet<Word>.

...