NHibernate - Как сопоставить таблицу с несколькими внешними ключами для соответствующих классов? - PullRequest
0 голосов
/ 27 июля 2011

У меня есть следующие таблицы:

enter image description here

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

Я создал следующие объекты:

  1. Пользователь
  2. Проект
  3. AccessRight

Как я могу сопоставить, используя NHibernate, сущность User, чтобы я мог легко получить права доступа для проекта, которому он назначен?

Я думал сделать следующее:

  1. Создайте новую сущность с именем «ProjectRight», в которой в качестве первичного ключа будет указан идентификатор проекта
  2. Создайте набор «Многие ко многим» в сущности «Пользователь»:

    public virtual ICollection<ProjectRight> ProjectRights { get; set; }

    А в отображении пользователя:

<set name="ProjectRights" table="Users_Projects_Rights">
  <key column="id_UserGroup"></key>
  <many-to-many class="ProjectRight" >
    <column name="id_Project" />
    <column name="id_AccessRight" />
  </many-to-many>
 </set>

Будет ли это работать? И если да, значит ли это, что мне нужно создать две дополнительные сущности, чтобы я мог отобразить таблицу Projects и AccessRights ..?

Спасибо

1 Ответ

1 голос
/ 27 июля 2011

Я бы предложил создать ProjectRight как компонент вместо сущности:

<set name="ProjectRights" table="Users_Projects_Rights">
    <key column="id_User"/>
    <composite-element class="ProjectRight">
        <many-to-one name="Project" column="id_Project"/>
        <many-to-one name="Right" column="id_AccessRight"/>
    </composite-element>
</set>

Это один из двух способов, предложенных в документации NHibernate.Для другого см. здесь .

...