0

我有以下 Nhibernate XML 文件,已编辑为核心位:

<?xml version="1.0" encoding="utf-8"?>
   <hibernate-mapping assembly="TTP.DAO" namespace="TTP.DAO" xmlns="urn:nhibernate-mapping-2.2">
<class name="InitialProcessSetup" table="InitialProcessSetup" lazy="true" >
    <id name="SetupID" column="setupID" unsaved-value="0" type="System.Int32">
        <generator class="identity"/>
    </id>
    <property name="DateCreated" column="DateCreated" />
    <many-to-one class="StoredUser" name="CreatedBy" column="CreatedBy" cascade="all-delete-orphan" not-null="true"/>
    <property name="OriginalDeadline" column="Deadline" />
    <property name="Detail" column="Detail" />
    <bag name="Subjects" table="InitialProcessSetupRatingSubject" inverse="true" cascade="all-delete-orphan">
        <key column="SetupId" not-null="true" />
        <many-to-many column="SubjectStoredUserId" class="StoredUser" />
    </bag>
    <bag name="Reviewers" table="InitialProcessSetupReviewer" cascade="all-delete-orphan">
        <key column="SetupId" not-null="true" />
        <many-to-many column="ReviewerStoredUserId" class="StoredUser" />
    </bag>
    <bag name="Invitations" cascade="all-delete-orphan">
        <key column="Setup" not-null="true"/>
        <one-to-many class="ProcessInvitation" />
    </bag>
</class>

我填充了上述映射中指示的类的一个新实例,并通过 GenericDAO().SaveOrUpdate(setup); 保存 它保存主要对象的详细信息,但不存储位。

在 Subjects 类上,它被定义为一个返回 IList-StoredUser 的虚拟属性。类构造函数将此属性设置为新的 List-StoredUser-()。

Subjects bag 元素指示的表是一个纯映射表,它具有SetupID 和StoredUserID 列,仅此而已。

在保存之前,我将使用 StoredUser 添加到派生的 StoredUserDAO() 到主题列表中。在调用 SaveOrUpdate() 之后,我也调用了 Flush()。

在我的数据库(SQL Server 2008R2)中,主要设置数据被保存,我添加到主题列表属性中的存储用户也被保存,只是映射表没有添加 setupID/StoredUserID。

我对 Nhibernate 有点陌生,这是一个现有的项目。任何关于错误的帮助想法将不胜感激。

4

1 回答 1

0

您已为 Subjects 集合设置了 inverse="true"。这意味着 NHibernate 要在关系表中创建记录,它必须是引用 InitialProcessSetup 的 StoredUser。

于 2012-10-06T17:09:46.617 回答