一对多的关系没有保存

时间:2012-11-08 12:08:03

标签: nhibernate

我在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>映射中。

由于

1 个答案:

答案 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;。