我有以下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包元素指示的表是一个纯映射表,它有一个SetupID和StoredUserID列,就是它。
在保存之前,我使用StoredUser将我的派生StoredUserDAO()添加到Subjects列表中。在调用SaveOrUpdate()之后,我也调用了Flush()。
在我的数据库(SQL Server 2008R2)中保存主设置数据,并且保存了我添加到Subjects列表属性的存储用户,只是映射表没有添加setupID / StoredUserID。
我有点像Nhibernate的菜鸟,这是一个现有的项目。 任何关于错误的帮助想法都会受到最高的赞赏。
答案 0 :(得分:0)
您已为Subjects集合设置inverse =“true”。这意味着对于NHibernate在关系表中创建记录,它必须是引用InitialProcessSetup的StoredUser。