0

我在 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 始终为空)。

我知道由于 NHibernate 的“怪癖”,这些关系总是必须是双向的,所以对于我的 Mark 类,我有:

<many-to-one name="ReportRow" class="ReportRow" column="ReportRowId" />

// C#
public virtual ReportRow ReportRow { get; set; }

我什至在我的项目的其他地方也有这种关系的其他例子,但是这个不起作用,除了......

... Mark 和 ReportRow 都有子类(例如 ModuleMark 和 ModuleReportRow),我使用joined-subclass 策略来实现继承。

这和它有关系吗?对于关系的两端,映射是在父类映射中定义的,而不是嵌套在<joined-subclass>映射中。

谢谢

4

1 回答 1

0

您如何将标记添加到集合中?因为集合是关系的反面,所以在添加到集合时需要在子对象上设置对父对象的引用。一种常见的做法是使用父对象中的方法来维护关系,例如:

   public void AddMark(Mark mark)
   {
      mark.ReportRow = this;
      Marks.Add(mark); // better yet map the collection as a private field
   }

我认为“逆”是“在这段关系中谁穿裤子”。

于 2012-11-08T14:08:54.160 回答