NHibernate - 多表映射?

时间:2011-12-20 05:42:42

标签: c# nhibernate nhibernate-mapping

我正在开发一个处理用户和项目的项目:

  • 可以为用户分配零个或X个项目。
  • 用户对项目具有读写权限。

在我的数据库中,我有一个名为Users_Projects_Rights的表,用于将用户与一定数量的项目相关联,并指定它们对它们的访问权限(它只是一个布尔值,写入权限为true,false阅读权)。

Users_Projects_Rights表格列为:

  • id_User
  • id_Project
  • CanWrite(boolean)

我的用户类目前有这个集合:

    /// <summary>
    /// Gets or sets a user's accessible projects, with the value being 
    /// the name of the project.
    /// </summary>
    public virtual IDictionary<int, string> AssignedProjects { get; set; }

考虑到我有一个Projects表,它有一个Name列:

  • 如何在我的User类中映射我的AssignedProjects词典,以便将项目Id作为键(使用带有Users_Projects_Rights表的三元映射)和项目名称(取自Projects表)作为值?

这是我想出的,但我不知道如何映射字典的值:

<map name="AssignedProjects" table="Users_Projects_Rights">
  <key column="id_User"/>
  <map-key column="id_Project" type="Int32"/>
  (How do I map the value... ?)
</map>

2 个答案:

答案 0 :(得分:0)

您的设计错误。因为用户可以有很多项目

public virtual IDictionary AssignedProjects {get;组; }

如果已映射,则

将抛出键已添加的异常。因此,设计用户具有分配给他的项目列表

public virtual List AssignedProjects {get;组; }

答案 1 :(得分:0)

我明白了,如果有人有更高效的答案,请告诉我:

<map name="AssignedProjects" table="Users_Projects_Rights">
  <key column="id_User"/>
  <index column="id_Project" type="System.Int32"/>
  <element formula="(SELECT Projects.name FROM Projects WHERE Projects.id = id_Project)"/>
</map>