NHibernate - 如何将具有多个外键的表映射到其对应的类?

时间:2011-07-27 03:58:17

标签: c# nhibernate mapping composite

我有以下表格:

enter image description here

基本上,用户是项目的一部分,并且对该特定项目具有某些访问权限。

我创建了以下实体:

  1. 用户
  2. 项目
  3. AccessRight
  4. 如何使用NHibernate映射用户实体,以便我可以轻松获取每个项目的访问权限?

    我正在考虑做以下事情:

    1. 创建一个名为“ProjectRight”的新实体,该实体将项目ID作为主键
    2. 在用户实体中创建“多对多”设置:

      public virtual ICollection<ProjectRight> ProjectRights { get; set; }

      在用户映射中:

    3. <set name="ProjectRights" table="Users_Projects_Rights">
        <key column="id_UserGroup"></key>
        <many-to-many class="ProjectRight" >
          <column name="id_Project" />
          <column name="id_AccessRight" />
        </many-to-many>
       </set>
      

      这会有用吗?如果是,这是否意味着我需要创建两个额外的实体,以便我可以映射Projects和AccessRights表。?

      由于

1 个答案:

答案 0 :(得分:1)

我建议将ProjectRight创建为组件而不是实体:

<set name="ProjectRights" table="Users_Projects_Rights">
    <key column="id_User"/>
    <composite-element class="ProjectRight">
        <many-to-one name="Project" column="id_Project"/>
        <many-to-one name="Right" column="id_AccessRight"/>
    </composite-element>
</set>

这是NHibernate文档建议的两种方法之一。对于另一个,请参阅here