NHibernate:多个表的相同类

时间:2009-12-05 12:42:50

标签: nhibernate nhibernate-mapping

我有一个文件附件类(FileAttachment),它在其他几个类中使用。

e.g。一篇文章包含多个附件。类别包含多个附件。这些附件实际上是相同的FileAttachment类,但由于显而易见的原因,它们被保存在不同的表中。例如Article_FileAttachments表中的文章的附件和Category_FileAttachments表中的类别文件附件。

我如何在nhibernate映射中表示这种关系? THX

2 个答案:

答案 0 :(得分:1)

这里有一些选择 - 我不知道哪一种最适合你:

  1. 您可以使用<any>映射来执行您想要的操作。更多信息at the nhibernate.info docsfrom Ayende。我自己没有用过这个,所以我不确定它会有所帮助。
  2. 创建ArticleAttachment和CategoryAttachment类,它们都来自FileAttachment。这些类可以正常映射,NHib不需要特别讲述基类。这里的问题是您将无法映射包含ArticleAttachments和CategoryAttachments的集合。
  3. 有一个FileAttachment表,用于存储所有附件的详细信息。然后,可以使用<many-to-many>联接将这些链接到您的文章和类别表。

答案 1 :(得分:1)

有关NHibernate的多态映射规则,请参阅第8章。

简而言之,您需要一个鉴别器列来指定哪个鉴别器持久存在于哪个表中。这是NHibernate文档中的一个实例,或者如果使用继承,则只需将派生类映射为子类,并在基类型类映射中为每个类指定数据表名称。

<class name="IPayment" table="PAYMENT">
  <id name="Id" type="Int64" column="PAYMENT_ID">
    <generator class="native"/>
  </id>
  <property name="Amount" column="AMOUNT"/>
  ...
  <joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
    <key column="PAYMENT_ID"/>
    ...
  </joined-subclass>
  <joined-subclass name="CashPayment" table="CASH_PAYMENT">
    <key column="PAYMENT_ID"/>
    ...
  </joined-subclass>
  <joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
    <key column="PAYMENT_ID"/>
    ...
  </joined-subclass>
</class>

您可能会发现付款是付款,无论付款方式如何。因此,它被映射为IPayment。然后,在多个表中进行子分类,这些表通过其鉴别器列表示每种类型的付款。

Chapter 8 - Polymorphic mapping