NHibernate Многие ко многим - PullRequest
       16

NHibernate Многие ко многим

5 голосов
/ 25 ноября 2008

У меня есть устаревшая база данных, и я пытаюсь создать NHibernate DAL. У меня проблема с отображением таблицы «многие ко многим».

Таблицы базы данных:

  • studio_Subscribers
  • studio_Groups (содержит список подписчиков)
  • studio_Subscribers_Groups - таблица «многие ко многим» с первичными ключами

Проблема в том, что когда я создаю экземпляр SubscriberGroup и заполняю его подписчиками, они сохраняются в таблицу studio_Subscribers, но не в таблицу "многие ко многим".

Я не могу понять, что не так?

studio_Subscribers отображение таблицы:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    assembly="Meridix.Studio.Common"
    namespace="Meridix.Studio.Common">
    <class name="SubscriberItem" table="studio_Subscribers">
        <id name="StorageId" column="Id" unsaved-value="0" access="nosetter.camelcase">
            <generator class="identity" />
        </id>
        <property name="Id" column="DomainId" not-null="true" />
        <property name="Subscriber" column="Subscriber" not-null="true" length="50" />
        <property name="Description" column="Description" not-null="false" length="100" />
        <property name="Type" column="Type" not-null="true" length="40" 
            type="Meridix.Studio.Data.Repositories.EnumStringTypes.SubscriberTypeEst, Meridix.Studio.Data.Repositories" />
    </class>
</hibernate-mapping>

studio_Groups отображение таблицы:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    assembly="Meridix.Studio.Common"
    namespace="Meridix.Studio.Common">
    <class name="SubscriberGroup" table="studio_Groups">
        <id name="StorageId" column="Id" unsaved-value="0" access="nosetter.camelcase">
            <generator class="identity" />
        </id>
        <property name="Id" column="DomainId" not-null="true" />
        <property name="Name" column="Name" not-null="true" length="200" />
        <property name="Description" column="Description" not-null="false" length="300" />

        <bag name="Subscribers" table="studio_Groups_Subscribers" access="nosetter.camelcase">
            <key column="GroupId"></key>
            <many-to-many column="SubscriberId" class="SubscriberItem" />
        </bag>
    </class>
</hibernate-mapping>

Ответы [ 2 ]

2 голосов
/ 25 ноября 2008

Разве у вас не должно быть подходящей сумки на вашем подписчике, а также отношение «многие ко многим» с группой?

<bag name="Groups" table="studio_Groups_Subscribers" access="nosetter.camelcase">
        <key column="SubscriberId"></key>
        <many-to-many column="GroupId" class="GroupItem" />
</bag>

и, возможно, в вашей коллекции SubscriberItems есть cascade = "save-update", чтобы при сохранении группы ваши дети обновлялись с соответствующим отношением "с другой стороны".

0 голосов
/ 05 января 2009

Я полагаю, что это связано с опциями каскада, ознакомьтесь с постом Айенде, и я думаю, что, немного погуглив, вы сможете найти правильный синтаксис для перехода в файл hbm. Я использую свободный-NHibernate, поэтому я не могу помочь вам с файлом XML.

http://ayende.com/Blog/archive/2006/12/02/NHibernateCascadesTheDifferentBetweenAllAlldeleteorphansAndSaveupdate.aspx

...