2010-01-11 61 views
0

我有一些名爲ProjectEmployeeBranch的數據庫表。員工可以同時在多個項目上工作。同樣,在一個項目中,有多名員工。此外,一個項目是在一個特定的分支進行的。爲了保持所有這些關係,我使用了一個project_employee_branch表,它將存儲上述三個表的相關主鍵。例如,這個project_employee_branch表可能包含一行(1,2,3),這意味着主鍵爲1的項目在主鍵爲3的分支上進行,其項目成員之一是其員工主鍵是2.如何在NHibernate中映射多對多關聯

如何映射NHibernate中的所有這些關聯?我已經使用外鍵概念映射了多對一關聯,但是我不知道如何映射這些類型的關聯,涉及中間表。

回答

1

我要說的第一點是你的數據庫模式和你的描述不匹配,所以請根據最初的告誡以下任何建議。你說

一個項目是在一個特定的分支

這意味着應該從項目到分支一個簡單的外鍵關係進行的。當然,如果這就是模式的樣子,那麼你會有一個雙向的多對多鏈接表,你的生活會更容易。

無論如何,通過三維組合,您需要有一個組件集合,其中組件具有其他兩種對象類型的多對一屬性。在section 7.2 of the NHibernate documentation中有一個示例,但我認爲它在產品的映射中看起來應該是這樣的:

<set name="BranchEmployees" table="product_employee_branch" lazy="true"> 
    <key column="product_id"> 
    <composite-element class="Purchase"> 
     <many-to-one name="Branch" class="Branch" /> 
     <many-to-one name="Employee" class="Employee"/> 
    </composite-element> 
</set>