【发布时间】:2010-10-28 09:57:55
【问题描述】:
我有一个名为 UserPermissions 的表,它通过 userId 对用户表进行了 FK,然后是一个字符串列,用于枚举的字符串值。
我看到的错误是 NHibernate.MappingException:来自表 UserPermissions 的关联引用了一个未映射的类:GotRoleplay.Core.Domain.Model.Permission
我的权限枚举:
public enum Permission
{
[StringValue("Add User")]
AddUser,
[StringValue("Edit User")]
EditUser,
[StringValue("Delete User")]
DeleteUser,
[StringValue("Add Content")]
AddContent,
[StringValue("Edit Content")]
EditContent,
[StringValue("Delete Content")]
DeleteContent,
}
我的用户类中的属性:
public virtual IList<Permission> Permissions { get; set; }
我的数据库表:
CREATE TABLE dbo.UserPermissions
(
UserPermissionId int IDENTITY(1,1) NOT NULL,
UserId int NOT NULL,
PermissionName varchar (50) NOT NULL,
CONSTRAINT PK_UserPermissions PRIMARY KEY CLUSTERED (UserPermissionId),
CONSTRAINT FK_UserPermissions_Users FOREIGN KEY (UserId) REFERENCES Users(UserId),
CONSTRAINT U_User_Permission UNIQUE(UserId, PermissionName)
)
我尝试映射用户对象的权限属性:
HasManyToMany(x => x.Permissions)
.WithParentKeyColumn("UserId")
.WithChildKeyColumn("PermissionName")
.WithTableName("UserPermissions")
.LazyLoad();
我做错了什么,它无法将权限映射到枚举值列表?
【问题讨论】:
-
所以经过大量修改后,我最终不得不创建一个名为 UserPermission 的新对象,并将其映射到 UserPermissions 表,并使用我的枚举作为数据类型,并使用 Permission 属性。这很好用,但是权限可以附加到角色和用户,这意味着我的选择查询要获得分配给用户(包括他们的所有角色)的每个权限,需要一组复杂的 linq 语句。我宁愿不那样做。有人有什么想法吗?
标签: fluent-nhibernate enums string mapping