我有一个名为权限的枚举。可以为用户分配权限,或者可以将权限分配给角色,并且可以为用户分配角色。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