C# NHibernate-多表映射?

C# NHibernate-多表映射?,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我正在从事一个处理用户和项目的项目: 用户可以被分配到零个或X个项目。 用户对项目具有读取或写入权限。 在我的数据库中,我有一个名为Users\u Projects\u Rights的表,用于将用户与一定数量的项目相关联,并指定他们对这些项目的访问权限。这只是一个布尔值,true表示写权限,false表示读权限 “用户”\u“项目”\u“权限”表列包括: id\u用户 id_项目 可写布尔值 我的用户类当前有以下集合: /// <summary> /// Gets o

我正在从事一个处理用户和项目的项目:

用户可以被分配到零个或X个项目。 用户对项目具有读取或写入权限。 在我的数据库中,我有一个名为Users\u Projects\u Rights的表,用于将用户与一定数量的项目相关联,并指定他们对这些项目的访问权限。这只是一个布尔值,true表示写权限,false表示读权限

“用户”\u“项目”\u“权限”表列包括:

id\u用户 id_项目 可写布尔值 我的用户类当前有以下集合:

    /// <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列:

如何在我的用户类中映射我的AssignedProjects dictionnary,以便使用Users\u Projects\u Rights表和Projects表中的项目名称作为值的三元映射将项目Id作为键? 以下是我的想法,但我不知道如何映射字典的价值:

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

你的设计是错误的。因为一个用户可以有很多这样的项目

公共虚拟IDictionary AssignedProjects{get;set;}

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


公共虚拟列表分配项目{get;set;}

我知道了,如果有人有更有效的答案,请告诉我:

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

为什么它会抛出那个异常。。?您的意思是,如果一个用户被分配两次到同一个项目..?否..当前用户可以分配到多个项目。Bcoz当前用户id是我们映射中的一个键否,该键是项目id,值是项目名称。