我在ReportRow(父级)和Mark(子级)之间建立了这种关系
<class name="ReportRow">
<bag name="Marks" cascade="save-update" inverse="true">
<key column="ReportRowId"/>
<one-to-many class="Mark"/>
</bag>
</class>
// C# code
public virtual IList<Mark> Marks { get; set; }
但它没有被保存(在Mark表中,ReportRowId始终为null)。
我知道这些关系总是必须是双向的,因为NHibernate的'quirk'所以对于我的Mark类我有:
<many-to-one name="ReportRow" class="ReportRow" column="ReportRowId" />
// C#
public virtual ReportRow ReportRow { get; set; }
我甚至在我的项目的其他地方也有其他一些关于这种关系的例子,但是这个没有用,除了......之外我看不出任何区别......
... Mark和ReportRow都有子类(例如ModuleMark和ModuleReportRow),我正在使用join-subclass策略来实现继承。
这会与它有关吗?对于关系的两端,映射在父类映射中定义,而不是嵌套在<joined-subclass>
映射中。
由于
答案 0 :(得分:0)
如何将Marks添加到集合中?由于集合是关系的反面,因此在将其添加到集合时,需要在子项上设置对父对象的引用。一种常见的方法是使用父对象中的方法来维护关系,例如:
public void AddMark(Mark mark)
{
mark.ReportRow = this;
Marks.Add(mark); // better yet map the collection as a private field
}
我想到&#34;反向&#34;作为&#34;谁在这种关系中穿着裤子&#34;。