2011-12-20 157 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