NHibernate映射麻烦

时间:2009-03-02 19:00:47

标签: nhibernate mapping one-to-many

我有以下对象模型:

  • 包含许多子项和后代的顶级抽象类Element
  • 课程Event
  • 每个Element都包含一包Event个。
  • 每个Event都有一个指向父Element的指针。

到目前为止 - 非常标准的一对多关系。

但是,我想根据具体的课程策略使用表格。因此,类Element未映射到数据库。我试图用这种方式解决它:Element的每个具体后代定义了它自己的Event个包。这个问题是每个<bag>元素都包含一个<key>元素。该关键字指向Parent的{​​{1}}属性。它还使Event表中的Parent列成为包含Bag的表的外键!但是一列不能是几个表的外键,我在插入时遇到异常。

我还试图让Event表中的Parent字段成为多对多的字段。那很有效。但是,当我想使关系双向,意味着,将行李添加到Event的后代时,我又回到了同样的问题。 Bag =&gt;外键=&gt;插入时的异常。

我确信这个案子并不像看起来那么独特。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

有点晚了,但我有一些建议。

如果您使用“每个具体类的表”,就好像您将映射完全独立的表一样。因此,您需要单独的外键或多对多。

多个到任何商店的类型名称和NH知道外键指向的位置。但是对这样的外键有限制是不可能的。

如果你有几个包含相同类型物品的行李,请确保它们都定义了不同的外键:

<class name="A">
  <!-- ... -->
  <bag name="Events">
    <key column="A_FK"/>
    <one-to-many class="Event"/>
   </bag>
</class>

<class name="B">
  <!-- ... -->
  <bag name="Events">
    <key column="B_FK"/>
    <one-to-many class="Event"/>
   </bag>
</class>

您可以对此类外键具有外键约束,但不能使用非null约束,因为只使用其中一个外键。

要真正只有一个包含所有约束的外键,您需要将该元素映射到一个单独的表。