2011-12-20 160 views
0

我正在负责处理用户和项目一个项目:NHibernate - 多表映射?

  • 可以将用户分配到零个或X项目。
  • 用户已经读取或写入项目的权限。

在我的数据库,我写了一个名为Users_Projects_Rights表,这是用来给用户,以一定数量的项目进行关联,以及对他们指定其访问权限(它只是一个布尔值,真权限,读取权利为false)。

的Users_Projects_Rights表列是:

  • id_User
  • id_Project
  • CanWrite(布尔)

我的User类目前拥有该类别:

/// <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; } 

考虑考虑,我有一个项目表,其中有一个名称的列:

  • 我该如何映射我AssignedProjects dictionnary,在我的User类,才能有项目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> 

回答

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

你的设计是wrong.Because用户可以有很多的项目,所以

public virtual IDictionary AssignedProjects {get;组; }

将抛出键已经添加异常,如果mapped.So设计的用户有被分配给他

公共虚拟目录AssignedProjects {获得项目列表;组; }

+0

为什么它会抛出该异常..?你的意思是,如果一个用户被分配两次到同一个项目..? – 2011-12-20 07:29:19

+0

否..当前用户可以分配到多个项目。当前用户标识是我们映射中的一个键 – Anand 2011-12-20 07:37:34

+0

不,关键是项目标识,值是项目名称。 – 2011-12-20 07:40:49