2009-12-05 37 views
1

我有一個文件附件類(FileAttachment),它在其他幾個類中使用。NHibernate:多個表的相同類

例如一篇文章包含多個附件。一個類別包含多個附件。這些附件實際上是相同的FileAttachment類,但由於顯而易見的原因,它們被保存在不同的表中。例如Article_FileAttachments表中的文章和Category_FileAttachments表中的類別文件附件的文件附件。

如何在nhibernate映射中表示這種關係? THX

+1

「這些附件其實是同FileAttachment的類,但對於明顯的原因,他們在不同的表依然存在。」咦?你的架構不好!你應該有一個'ATTACHMENTS'或類似的表,其他表都可以通過外鍵指向。 – 2009-12-05 13:01:57

+0

你仍然有多個表,因爲你需要一個多對多的關係。 – Yannis 2009-12-06 15:10:52

回答

1

請參閱第8章有關NHibernate的多態映射規則。

總之,您將需要一個鑑別器列來指定哪個鑑別器持續到哪個表。下面是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

0

這裏有些選項 - 我不知道哪一個最適合你:

  1. 您可以使用<any>映射到你想要做什麼。更多信息at the nhibernate.info docsfrom Ayende。我自己沒有使用過,所以我不完全確定它會有幫助。
  2. 創建從FileAttachment派生的ArticleAttachment和CategoryAttachment類。這些類可以正常映射,NHib不需要特別講述基類。這裏的問題是,您將無法映射包含ArticleAttachments和CategoryAttachments的集合。
  3. 有一個單獨的FileAttachment表,它存儲全部附件的詳細信息。然後可以使用<many-to-many>連接將它們鏈接到您的文章和類別表。
+0

你能解釋一下第三個選項嗎? THX – Yannis 2009-12-06 07:14:20

+0

表ArticleAttachment:列條款ArticleID,FileAttachmentID 表CategoryAttachment:列類別ID,FileAttachmentID 表FileAttachment的:列編號,姓名等再 你的文章和類別映射應該包括類似: <集名稱= 「FileAttachments」> 2009-12-06 22:09:21