FluentNHibernate и Enums

У меня есть enum под названием Permissions. Пользователю могут быть назначены разрешения, или разрешения могут быть назначены роли, и пользователю может быть назначена роль.

User и Role имеют свойство, подобное этому:

public virtual IList<Permission> Permissions { get; set; }

Я хочу использовать enum для Permissions, поэтому в моем коде я могу делать такие вещи, как

public static bool UserHasPermission(Permission.DeleteUser)

Прямо сейчас у меня есть около 50 различных разрешений в моем перечислении. Было бы хорошо, если бы мне не пришлось заполнять зеркальный набор данных в базе данных. Мое перечисление выглядит так:

public enum Permission
    {
        //site permissions 1-99
        [StringValue("View Users")]
        ViewUser = 1,

        [StringValue("Add User")]
        AddUser = 2,

        [StringValue("Edit User")]
        EditUser = 3,

        [StringValue("Delete User")]
        DeleteUser = 4

        ...

}

В настоящее время у меня есть таблица для PermissionsId (int) и PermissionName (varchar (50)).

Вот мои таблицы на стороне ролей. Пользовательская часть точно такая же, как и разрешения:

CREATE TABLE dbo.Roles
(
    RoleId                      int                 IDENTITY(2,1) NOT NULL,
    RoleName                    varchar (50)        NOT NULL,

    CONSTRAINT PK_Roles PRIMARY KEY CLUSTERED (RoleId)
)

CREATE TABLE dbo.RolePermissions
(
    RolePermissionId            int                 IDENTITY(1,1) NOT NULL,
    RoleId                      int                 NOT NULL,
    PermissionId                int                 NOT NULL,

    CONSTRAINT PK_RolePermissions PRIMARY KEY CLUSTERED (RolePermissionId),
    CONSTRAINT FK_RolePermissions_Roles FOREIGN KEY (RoleId) REFERENCES Roles(RoleId),
    CONSTRAINT U_RolePermissions UNIQUE(RoleId, PermissionId)
)

Затем у меня есть таблица разрешений на случай, если она мне понадобится, но я просто не понимаю, как сопоставить поле id в RolePermissions или таблицу Permissions обратно в enum.

CREATE TABLE dbo.Permissions
(
    PermissionId                    int                 NOT NULL,
    PermissionName                  varchar (50)        NOT NULL,

    CONSTRAINT PK_Permissions PRIMARY KEY CLUSTERED (PermissionId)
)
Можно ли сопоставить перечисление с таблицей?Должен ли я даже сопоставить его или я просто должен взять таблицу Permissions и в UserPermissions и RolePermissions оставить PermissionId только int и отобразить в перечисление?Если я сохраню таблицу Permissions, есть ли способ для nhibernate автоматически заполнить данные в таблице Permissions из данных в enum?

Прямо сейчас у меня нет сопоставления с перечислением полномочий, кроме как что-то вроде этого:

HasManyToMany(x => x.Permissions)
                 .WithParentKeyColumn("RoleId")
                 .WithChildKeyColumn("PermissionId")
                 .WithTableName("RolePermissions")
                 .LazyLoad()
                 .Cascade.All();

К сожалению, это вызывает ошибку:

Ассоциация из таблицы RolePermissions ссылается на не отображенный класс: GotRoleplay.Core.Domain.Model.Permission

Что я делаю не так с перечислениями? Существует ли стандартный способ или наилучшая практика для их использования с fluentnhibernate, когда enum представляет собой список значений объекта, а не только одно значение?

Ответы на вопрос(2)

Ваш ответ на вопрос