Беглое NHibernate Объективированное / Связанное Отображение Отношений - PullRequest
0 голосов
/ 04 ноября 2010

Хорошо, я довольно плохо знаком с Fluent и NHibernate, и я не уверен, как отобразить эти специфические отношения, которые существуют в моей базе данных. У меня есть следующая диаграмма ER, которая обрисовывает в общих чертах мою структуру таблицы.

ER Diagram

Ниже приведены мои текущие классы сущностей C # и отображения Fluent:

public class GroupHeader
{
    public virtual Guid Id { get; private set;}
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual IList<RightHeader> AllowedRights { get; set; }
    public virtual IList<RightHeader> DeniedRights { get; set; }
    public virtual IList<RightHeader> UnsetRights { get; set; }
}

public class RightHeader
{
    public virtual decimal Num { get; private set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
}

public class GroupHeaderMap : ClassMap<GroupHeader>
{
    public GroupHeaderMap()
    {
        Table("GROUP_HEADER");
        Id(x => x.Id, "GROUP_ID");
        Map(x => x.Name, "GROUP_NAME").Unique();
        Map(x => x.Description, "GROUP_DESCRIPTION");

        HasManyToMany(x => x.AllowedRights)
            .Table("GROUP_RIGHT_COMPOSITE")
            .ParentKeyColumn("GROUP_ID")
            .ChildKeyColumn("RIGHT_NUM")
            .Where("RIGHT_VALUE = 1")
            .Cascade.SaveUpdate();

        HasManyToMany(x => x.DeniedRights)
            .Table("GROUP_RIGHT_COMPOSITE")
            .ParentKeyColumn("GROUP_ID")
            .ChildKeyColumn("RIGHT_NUM")
            .Where("RIGHT_VALUE = -1")
            .Cascade.SaveUpdate();

        HasManyToMany(x => x.UnsetRights)
            .Table("GROUP_RIGHT_COMPOSITE")
            .ParentKeyColumn("GROUP_ID")
            .ChildKeyColumn("RIGHT_NUM")
            .Where("RIGHT_VALUE = 0")
            .Cascade.SaveUpdate();
    }
}

public class RightHeaderMap : ClassMap<RightHeader>
{
    public RightHeaderMap()
    {
        Table("RIGHT_HEADER");
        Id(x => x.Num, "RIGHT_NUM");
        Map(x => x.Name, "RIGHT_NAME");
        Map(x => x.Description, "RIGHT_DESCRIPTION");
    }
}

В настоящее время всякий раз, когда я создаю новый GroupHeader и заполняю переменную-член AllowedRights, он не может вставить эти записи, поскольку столбец RIGHT_VALUE в GROUP_RIGHT_COMPOSITE не допускает пустые значения. Я не совсем уверен, как отобразить это бегло или где я должен действительно обработать это в моих сущностях. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 ноября 2010

Проблема, которую я обнаружил в приведенном выше сопоставлении, заключается в том, что я пытался рассматривать таблицу USER_GROUP_COMPOSITE как отношение, а не как сам объект. Я изменил приведенный выше код таким образом, что существует новый объект с именем GroupRight, который содержит ссылки на GroupHeader и RightHeader внутри объекта.

Я думаю, что это решило мой общий вопрос о том, как мне их отобразить, но у меня все еще есть проблемы с сохранением этих данных в базе данных. Мой измененный вопрос (включая обновления моих сущностей и сопоставления) можно найти здесь Пост

Статьи, которые я нашел полезными для решения этой проблемы: Ссылка 1 Ссылка 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...