2011-08-20 253 views
1

所以我有一個情況我試圖用NHibernate映射。假設我們有以下模式:NHibernate多對多映射

Question 
- QuestionID 
- QuestionText 
- SiteID 

Tag 
- TagID 
- TagName 
- SiteID 

QuestionTags 
- QuestionID 
- TagID 

這將正常工作爲:

<class name="Question" table="Questions"> 
     <key column="QuestionID" /> 
     <property name="QuestionText" not-null="true" /> 
     <property name="SiteID" not-null="true" /> 

     <set name="Tags" table="QuestionTags"> 
     <key column="QuestionID" /> 
     <many-to-many class="Tag" column="TagID" /> 
     </set> 
</class> 

<class name="Tag" table="Tags"> 
     <key column="TagID" /> 
     <property name="TagName" not-null="true" /> 
     <property name="SiteID" not-null="true" /> 
</class> 

不過,我想一個SITEID列添加到QuestionTags,並添加SITEID到它的每一個外鍵。 ..

(QuestionTags.QuestionID, QuestionTags.SiteID) -> (Questions.QuestionID, Questions.SiteID) 
(QuestionTags.TagID, QuestionTags.SiteID) -> (Tags.TagID, Tags.SiteID) 

...使問題和標籤具有不同的siteId不能關聯。我該如何繪製這種情況?

回答

0

在QuestionTags表上有SiteID列的外部要求嗎?問題和標記已經具有SiteID,並且域模型可以強制使用不同的SiteID將標記分配給問題。所以從應用程序的角度來看,你並不需要它。

多對多關係的連接/映射表只支持兩列。請記住,該表不代表實體,而只代表實體之間的關係。如果你添加任何額外的數據/列,那麼它將需要成爲一個實體與其他兩個實體的關係。 See this question以獲得中間實體支持映射表中另一列的示例。