我有一个文件附件类(FileAttachment),它在其他几个类中使用。
e.g。一篇文章包含多个附件。类别包含多个附件。这些附件实际上是相同的FileAttachment类,但由于显而易见的原因,它们被保存在不同的表中。例如Article_FileAttachments表中的文章的附件和Category_FileAttachments表中的类别文件附件。
我如何在nhibernate映射中表示这种关系? THX
答案 0 :(得分:1)
这里有一些选择 - 我不知道哪一种最适合你:
<any>
映射来执行您想要的操作。更多信息at the nhibernate.info docs和from Ayende。我自己没有用过这个,所以我不确定它会有所帮助。<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。然后,在多个表中进行子分类,这些表通过其鉴别器列表示每种类型的付款。