2011-12-20 1 views
0

Я работаю над проектом, который обрабатывает пользователей и проекты:NHibernate - Множественное отображение таблицы?

  • Пользователь может быть назначен на ноль или X проектов.
  • Пользователь имеет права на чтение или запись на проект.

В моей базе данных, у меня есть таблица с именем Users_Projects_Rights, который используется, чтобы связать пользователя к определенному числу проектов, а также определить их права доступа на них (это просто логическое значение, верно для записи права, false для прав на чтение).

Столбцы Users_Projects_Rights таблицы являются:

  • id_User
  • id_Project
  • CanWrite (булево)

Мой класс Пользователь в настоящее время эти коллекции:

/// <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, чтобы иметь идентификатор проекта в качестве ключа (с использованием троичной отображения с таблицей 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

Почему бы это выбросить это исключение? .. Вы имеете в виду, если пользователь дважды назначается на тот же проект ..? –

+0

no..current пользователь может назначаться нескольким project.Bcoz текущий идентификатор пользователя является ключом в нашем сопоставлении – Anand

+0

Нет, ключ - это идентификатор проекта, а значение - имя проекта. –