【发布时间】:2016-03-23 18:03:56
【问题描述】:
我在表用户和角色之间有一个简单的多对多关系,使用 UserRole 表作为关系之一。 所以,它看起来像这样: User->one-to-many-> UserRole
用户.cs:
public class User
{
public User()
{
Roles = new List<Role>();
}
public virtual int UserId { get; set; }
public virtual string UserName { get; set; }
public virtual IList<Role> Roles { get; set; }
}
角色.cs:
public class Role
{
public virtual Guid RoleId { get; set; }
public virtual string Name { get; set; }
public virtual IList<User> Users { get; set; }
}
用户角色.cs:
public class UserRole
{
public virtual Guid UserRoleId { get; set; }
public virtual int CommonUserId { get; set; }
public virtual Guid RoleId { get; set; }
}
UserMap.cs:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.UserId).GeneratedBy.Identity();
Map(x => x.UserName);
HasManyToMany(x => x.Roles)
.Cascade.None()
.Reverse()
.Table("UserRole")
.ParentKeyColumn("UserId")
.ChildKeyColumn("RoleId");
}
}
角色映射.cs
class RoleMap : ClassMap<Role>
{
public RoleMap()
{
Id(x => x.RoleId).GeneratedBy.GuidComb();
Map(x => x.Name);
HasManyToMany(x => x.Users)
.Cascade.None()
.Table("UserRole")
.ParentKeyColumn("RoleId")
.ChildKeyColumn("UserId");
}
}
用户角色映射.cs:
public class UserRoleMap : ClassMap<UserRole>
{
public UserMap()
{
Id(x => x.UserRole).GeneratedBy.GuidComb();
}
}
我的问题是: 在 NHibernate 中是否可以从数据库中获取用户,将角色添加到它的集合并保存。我知道我可以使用 UserRole 表来做到这一点,只需添加/删除关联, 但这是否可以在我的代码中不使用 UserRole 类(我的意思是在 BL 中)做同样的事情?
基本上,如果我想为用户添加角色,我可以将它们添加到他的收藏并保存,而不是通过手动操作 UserRole 吗? 此外,UserRole 应该有 GuidComb 键,但是当我尝试添加角色时 - 它会引发 UserRoleId 不能为空并且探查器显示的异常
INSERT INTO UserRole
(UserId, RoleId)
VALUES
(1, 'some-guid-here')
所以它不会为我生成主键
非常感谢
【问题讨论】:
标签: c# nhibernate many-to-many