Сопоставление троичной ассоциации с FluentNHibernate с использованием IDictionary <TKey, TValue> - PullRequest
2 голосов
/ 17 апреля 2009

Я пытаюсь сопоставить троичную ассоциацию с помощью FluentNhibernate.

У меня есть 3 таблицы:

  • TUser(PK int id, string name, ...)
  • TGroup(PK int id, string name, ...)
  • TRole(PK int id, string name, ...)

И четвертый, который связывает их, представляя троичное объединение:

  • TUserGroupRole(FK int userid, FK int groupid, FK int roleid)

Обычно пользователь играет определенную роль для группы. Я использую 3 типа в моей модели:

  • User
  • UserGroup
  • UserRole

В классе User я хочу использовать IDictionary<UserGroup,UserRole> для индексации ролей пользователей по группам:

public class User
{
    public virtual int Id { get; set; }
    public virtual IDictionary<UserGroup, UserRole> Roles { get; set; }
    // ...
}

Используя обычный XML-файл отображения в стиле hbm, я добился этого с помощью элемента <map>, например, так (псевдо-отображение):

<map name="Roles" table="TUserGroupRole">
    <key column="userid"/>
    <index-many-to-many column="groupid" class="UserGroup"/>
    <many-to-many column="roleid" class="UserRole"/>
</map>

Я не смог выяснить, как создать такое же отображение с помощью FluentNhibernate , поэтому любая помощь по этому вопросу будет очень признательна.

Ответы [ 2 ]

1 голос
/ 18 апреля 2009

В ответ на ответ, полученный вами в группе FNH, убедитесь, что вы экспортируете файлы сопоставления, например:

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyObject>()
    .ExportTo("path")

Я склонен согласиться с этим ответом, потому что я когда-либо видел такого рода исключения только тогда, когда элементы вышли из строя; то есть, когда ключ / индекс или элемент id не первый дочерний элемент.

0 голосов
/ 11 ноября 2013

с FNH 1.3 должно выглядеть как

HasManyToMany(x => x.Roles)
    .ParentKeyColumn("userid")
    .AsTernaryAssociation("groupid")
    .ChildKeyColumn("roleid");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...