我有一個名爲權限的枚舉。可以爲用戶分配權限,或者可以將權限分配給角色,並且可以爲用戶分配角色。FluentNHibernate和枚舉
用戶和角色都具有這樣的特性:
public virtual IList<Permission> Permissions { get; set; }
我想用一個枚舉的權限,以便在我的代碼我可以這樣做
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
...
}
目前,我有權限的表是PermissionId(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)
)
然後,我有一個權限的情況下,我tble需要,但我只是不明白如何可以id字段中RolePermissions地圖或權限表返回到枚舉。
CREATE TABLE dbo.Permissions
(
PermissionId int NOT NULL,
PermissionName varchar (50) NOT NULL,
CONSTRAINT PK_Permissions PRIMARY KEY CLUSTERED (PermissionId)
)
- 我可以映射枚舉表?
- 我應該甚至映射它,還是應該取出權限表,並在UserPermissions和RolePermissions中將PermissionId只留下一個int並將其映射到枚舉中?
- 如果我保留權限表,那麼是否有一種方法可以讓nhibernate從枚舉中的數據自動填充權限表中的數據?
現在,我都沒有映射到權限枚舉,不是像這樣其他:
HasManyToMany(x => x.Permissions)
.WithParentKeyColumn("RoleId")
.WithChildKeyColumn("PermissionId")
.WithTableName("RolePermissions")
.LazyLoad()
.Cascade.All();
不幸的是,這將導致一個錯誤:
An association from the table RolePermissions refers to an unmapped class: GotRoleplay.Core.Domain.Model.Permission
我在做什麼錯與枚舉?當enum是對象上的值列表而不僅僅是單個值時,是否有一種標準方式或最佳實踐來使用它們與fluentnhibernate?
我無法幫助您提供更好的解決方案,但我很高興您找到了答案。 – CalebHC 2009-07-09 07:10:25