如何在NHibernate中映射多对多的关联

时间:2010-01-11 10:10:32

标签: nhibernate mapping many-to-many

我有一些名为ProjectEmployeeBranch的数据库表。员工可以同时在多个项目上工作。同样,在一个项目中,有多名员工。此外,项目在特定分支机构进行。为了维护所有这些关系,我使用了一个project_employee_branch表,它将存储上述三个表的相关主键。例如,此project_employee_branch表可能包含类似(1,2,3)的行,这意味着主键为1的项目在主键为3的分支上执行,并且其项目成员之一是主键为2的员工。

如何在NHibernate中映射所有这些关联?我使用外键概念映射了多对一关联,但我不知道如何映射这些类型的关联,其中涉及中间表。

1 个答案:

答案 0 :(得分:1)

我要说的第一点是您的数据库架构和您的描述不匹配,因此请根据最初的警告采取以下建议。你说那个

  

项目在特定分支机构进行

这意味着从项目到分支应该存在简单的外键关系。当然,如果这就是架构的样子,你就会有一个双向的多对多链接表,你的生活会更容易。

无论如何,通过三方组合,您需要拥有一组组件,其中组件具有其他两种对象类型的多对一属性。 section 7.2 of the NHibernate documentation中有一个示例,但我认为在Product的映射中看起来像这样:

<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>