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

发布于 2024-11-26 12:50:45 字数 813 浏览 2 评论 0原文

我有下表:

在此处输入图像描述

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

我创建了以下实体:

  1. 用户
  2. 项目
  3. AccessRight

如何使用 NHibernate 映射用户实体,以便我可以轻松获取他分配给的每个项目的访问权限?

我正在考虑执行以下操作:

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

    公共虚拟 ICollection;项目权利{获取;放; }

    并在用户映射中:


  <键列=“id_UserGroup”>
  <多对多类=“ProjectRight”>
    <列名=“id_Project”/>
    <列名=“id_AccessRight”/>
  
 

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

谢谢

I have the following tables :

enter image description here

Basically, a user is part of a project and has certain access rights on that particular project.

I created the following entities:

  1. User
  2. Project
  3. AccessRight

How can I map, using NHibernate, a User entity so that I can easily fetch the access rights per project he's assigned to ?

I was thinking of doing the following:

  1. Create a new entity called "ProjectRight" which will have a Project ID as the primary key
  2. Create a "Many-To-Many" set within the User entity :

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

    And in the User mapping:

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

Would this work ? And if yes, does that mean that I'll need to create two additional entities so that I can map the Projects and AccessRights table..?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寂寞清仓 2024-12-03 12:50:45

我建议将 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 文档建议的两种方法之一。对于另一个,请参阅此处

I'd suggest creating ProjectRight as a component instead of an entity:

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

This is one of the two ways suggested by the NHibernate documentation. For the other one see here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文