我在一类中有这个映射:
<class name="Parent">
<set name="Activity" table="ChangeLogs" order-by="ChangeDate desc" cascade="all-delete-orphan">
<key column="RequestID" />
<one-to-many class="ChangeLog" />
</set>
而这在另一个:
<class Name="Child">
<many-to-one name="Request" class="Request" column="RequestID" />
在父级中,在当前事务中加载我添加到集合中:
parent.Activity.Add(new Child(){/* properties, etc */});
然后我提交交易。对父级的任何更改都会通过更新调用保存到数据库中,但无论级联值或 inverse=true/false/just-save-already 如何,我都无法插入这些子级。我一直在抨击它,阅读示例/文档/等,但我不明白为什么它不起作用。我错过了一些简单的东西吗?我一直在关闭服务器并在每次更改后重新构建以确保事情正在更新,但是 nada。
更糟糕的是,有时它会起作用,具有各种逆值,有时通过将 Request=parent 添加到孩子,有时通过在添加之前单独保存孩子......然后它稍后退出工作。我很困惑o_O
编辑:自从发布以来,事情已经明确地尝试过,在每个人之间重建+服务器重新启动,没有一个会产生插入调用或错误:
<set inverse=true>
parent.Activity.Add(new Child(){Request=parent})
<set inverse=true>
parent.Activity.Add(new Child(){})
<set>
parent.Activity.Add(new Child(){Request=parent})
<set>
parent.Activity.Add(new Child(){})
<set inverse=false>
parent.Activity.Add(new Child(){Request=parent})
<set inverse=false>
parent.Activity.Add(new Child(){})
这确实有效:
<set>
Child c = new Child() {Request = parent};
parent.Activity.Add(c);
Session.Save(c);
但是,如果忽略它,那么设置级联又有什么意义呢?
编辑:在阅读了一些内容之后: http: //nhibernate.info/doc/nh/en/index.html#example-parentchild-bidir我试过了:
<class Name="Child">
<many-to-one name="Request" class="Request" column="RequestID" not-null=true />
以上所有6个主要的,没有运气。