Словарь картографирования - PullRequest
0 голосов
/ 24 января 2012

У меня есть 3 таблицы Users, AccessLevels, Roles. Мой класс пользователя имеет public virtual Dictionary<Role,AccessLevel> Roles {get; set;}, и Роль класса есть public virtual Dictionary<User,AccessLevel> Users {get;set;}? Как такие словари должны быть представлены в отображении?

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Было бы очень хорошо, если бы вы предоставили структуру ваших таблиц, особенно таблицы AccessLevels. Насколько я могу предположить структуру ваших таблиц, я могу предложить вам это отображение

<class name="User" table="Users">
    <id name="Id" column="user_id">
        <generator class="native" />
    </id>

    <property name="Name" column="user_name" not-null="true" />

    <map name="Roles" table="AccessLevels" cascade="save-update">
        <key column="user_id" />
        <map-key-many-to-many column="role_id" class="Role" />
        <one-to-many class="AccessLevel"/>
    </map>
</class>

<class name="Role" table="Roles">
    <id name="Id" column="role_id">
        <generator class="native" />
    </id>

    <property name="Name" column="user_name" not-null="true" />
</class>

<class name="AccessLevel" table="AccessLevels">
    <id name="Id" column="Id">
        <generator class="native" />
    </id>

    <property name="Level" column="level" not-null="true" />
    <many-to-one name="User" column="user_id" not-null="true" cascade="save-update" />
    <many-to-one name="Role" column="role_id"  not-null="true" cascade="save-update" />
</class>
0 голосов
/ 24 января 2012

в FluentNhibernate это будет выглядеть как

HasManyToMany(user => user.Roles)
    .Table("UserRoleAccessLevel")
    .AsEntityMap("role_id")
    .KeyColumn("user_id");

HasManyToMany(role => role.Users)
    .Table("UserRoleAccessLevel")
    .AsEntityMap("user_id")
    .KeyColumn("role_id");

не могу проверить это сейчас, хотя

Обновление: в hbm.xml

<map name="Roles" table="UserRoleAccessLevel">
  <key column="user_id" />
  <index-many-to-many class="Role" column="role_id" />
  <many-to-many class="AccessLevel" column="accesslevel_id" />
</map>

<map name="Users" table="UserRoleAccessLevel">
  <key column="role_id" />
  <index-many-to-many class="User" column="user_id" />
  <many-to-many class="AccessLevel" column="accesslevel_id" />
</map>
...