Свободная проблема отображения nHibernate - PullRequest
0 голосов
/ 07 июля 2011

У меня есть БД со следующими таблицами

  • Пользователи
  • Роли
  • UserInRoles (таблица мостов для пользователей и ролей для отношений многие ко многим
  • Модули
  • ModulePermission (это включает в себя PK Roles и модулей и поле bool для определения роли, у которой есть разрешение на доступ к модулю или нет

теперь я не совсем понимаюОтображение этих таблиц в беглом nHibernate, я сделал сопоставление, как определено на Свободном вики-сайте nHibernate , но получил эту ошибку:

(XmlDocument) (3,6): проверка XMLошибка: элемент «составной-идентификатор» в пространстве имен «urn: nhibernate-mapping-2.2» имеет неполное содержимое. Список возможных ожидаемых элементов: «мета, свойство ключа, ключ-многие-к-одному» в пространстве имен »urn:nhibernate-mapping-2.2 '.

Отображение: UserMap:

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("tblUsers");
        LazyLoad();
        Id(user => user.UserID).GeneratedBy.GuidComb();
        Map(user => user.UserName).Not.Nullable();
        Map(user => user.Password).Not.Nullable();
        Map(user => user.IsActive).Nullable();
        HasManyToMany(user => user.RolesOfUser).Cascade.All().Inverse().Table("UserInRoles");
    }
}

RoleMap:

public class RoleMap : ClassMap<Role>
{
    public RoleMap()
    {
        Table("tblRoles");
        Id(role => role.RoleID).GeneratedBy.Identity();
        Map(role => role.RoleName).Not.Nullable();
        Map(role => role.IsActive).Not.Nullable();
        Map(role => role.Description).Not.Nullable();
        HasManyToMany(role => role.Users).Cascade.All().Table("UserInRoles");
    }
}

Кто-нибудь знает, в чем проблема?

Спасибо

1 Ответ

3 голосов
/ 07 июля 2011

Конфигурация отображения HasManyToMany работала для меня, когда я определял столбец родительского и дочернего ключей.Вы можете сделать это так:

HasManyToMany(user => user.RolesOfUser)
    .Table("UserInRoles")
    .ParentKeyColumn("UserID")
    .ChildKeyColumn("RoleID");
...