5

レガシー データベースがあり、NHibernate DAL を作成しようとしています。多対多テーブルのマッピングに問題があります。

データベース テーブル:

  • studio_Subscribers
  • studio_Groups(サブスクライバーの IList を含む)
  • 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>
4

2 に答える 2

2

グループとの多対多の関係で、サブスクライバーにも適切なバッグを用意する必要はありませんか?

<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" を設定して、グループを保存すると、「反対側」からの適切な関係で子が更新されるようにすることもできます。

于 2008-11-25T12:37:30.273 に答える
0

カスケードオプションに関係していると思います。Ayendeの投稿をチェックしてください。少しグーグルすると、hbmファイルに入れる正しい構文を見つけることができると思います。私はfluent-NHibernateを使用しているので、XMLファイルについてはお手伝いできません。

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

于 2009-01-04T22:53:07.377 に答える