Свободный вопрос NHibernate - PullRequest
8 голосов
/ 11 января 2009

Допустим, у вас есть две таблицы: «Пользователи» и «Пользовательские роли». Вот как структурированы две таблицы (таблица - столбцы):

Пользователи - UserID (int)

UserRoles - UserID (int), Role (string)

Я хочу, чтобы у моего класса «Пользователь» в моем домене был список ролей. Как мне построить отображение Fluent NHibernate для достижения этой цели?

Ответы [ 4 ]

13 голосов
/ 11 января 2009

То, что вы ищете, это набор элементов, который в стандартном отображении hbm:

<set name="Roles" table="UserRoles">
  <key column="UserID" />
  <element column="Role" />
</set>

Для Fluent NHibernate вы можете отобразить это так:

HasMany<string>(x => x.Roles)
  .AsElement("Role");

Вам также может понадобиться указать имя ключа, используя WithKeyColumn(string).

4 голосов
/ 29 марта 2010

FWIW это изменилось незначительно в наши дни. Текущее отображение

HasMany<string>(x => x.Roles)
  .Element("Role");
0 голосов
/ 18 февраля 2009

Это также сработало:

HasMany<Role>(u => u.Roles)
                .WithTableName("UserRoles")
                .Component(role => role.Map(r => r.Name))
                .AsList();

Вам не нужно отображать Role или UserRoles.

Убедитесь, что Роль реализует IEquatable < Role > ;.

0 голосов
/ 11 января 2009

Я полагаю, это будет

public User()
  {
    Id(x => x.UserID);
    HasMany<UserRoles>(x => x.UserRoles).AsBag();
  }

Вы также должны убедиться, что вы сопоставили свой класс UserRoles

...