我想我已经尝试过所有这些工作,但无济于事。 任何提示/帮助非常感谢。
以下父子关系会在创建父级时导致以下错误。
无法插入:[Kanpeki.Domain.CalEvtCatergory] [SQL:INSERT INTO tb_calEvent_catergory(catergoryID,parentID,catergoryType,catergoryLabel,id)VALUES(?,?,?,?,?)]
2个对象映射如下:
Parent = CalEvent
<id name="id" column="id">
<generator class="hilo"/>
</id>
<bag name="catergories" table="tb_calEvent_catergory" lazy="false" cascade="all">
<key column="parentID" foreign-key="id"/>
<one-to-many class="CalEvtCatergory"/>
</bag>
Child = CalEvtCatergory
<class name="CalendarCatergory" table="tb_calendar_catergory" lazy="false" >
<id name="id" column="id">
<generator class="hilo"/>
</id>
<property name="parentID" />
snip....
它似乎没有将calEvent的(parentID)id应用于CalendarCatergory
答案 0 :(得分:3)
听起来好像它可能试图将NULL插入到子表上的parent_id列中,该列标记为非null。您应该做两件事(可能)解决您的问题。第一, 改变
<property name="parentID" />
到
<many-to-one name="parentID" column="parent_id_column_name_here" not-null="true" />
然后,通过将inverse =“true”添加到父级的包中,将关系标记为反向(即子级通过parentID属性管理关系的状态),如:
<bag name="catergories" table="tb_calEvent_catergory" inverse="true" lazy="false" cascade="all">
<key column="parentID" foreign-key="id"/>
<one-to-many class="CalEvtCatergory"/>
</bag>
另外,我不确定包映射是否正确。具体来说,是外键属性。我在文档中找不到这个。 NHibernate可能只是忽略了它,但我会摆脱它。通常,双向一对多映射应如下所示:
<!-- Parent Table Mapping -->
...
<set name="Children" inverse="true" [(optional)cascade="all|save-update|etc"]>
<key column="parent_id" />
<one-to-many class="Child" />
</set>
...
<!-- Child Table Mapping -->
...
<many-to-one name="Parent" column="parent_id" not-null="true"/>
...
如果未指定级联,则必须单独保存每个对象。