NHibernate多对多映射更新关联表
本文关键字:关联 更新 映射 NHibernate | 更新日期: 2023-09-27 18:18:58
我正在尝试使用NHibernate 4和Fluent NHibernate 2设置多对多映射。这是一个简单的User和Role关系。一个用户可以拥有多个角色,一个角色可以拥有多个用户。结构如下:
用户public User()
{
Id = Guid.NewGuid();
Roles = new List<Role>();
}
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Role> Roles { get; set; }
角色public Role()
{
Id = Guid.NewGuid();
Users = new List<User>();
}
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<User> Users { get; set; }
UserMap
Id(x => x.Id).Column("Id").GeneratedBy.Assigned();
Map(x => x.Name);
HasManyToMany(x => x.Roles)
.Cascade.AllDeleteOrphan()
.Inverse()
.Table("UserRole")
.ParentKeyColumn("ObjUser")
.ChildKeyColumn("ObjRole");
RoleMap
Id(x => x.Id).Column("Id").GeneratedBy.Assigned();
Map(x => x.Name);
HasManyToMany(x => x.Users)
.Cascade.None()
.Table("UserRole")
.ParentKeyColumn("ObjRole")
.ChildKeyColumn("ObjUser");
更新现有用户
User objUser = UserManager.Get(_userId);
objUser.Name = txtName.Text;
foreach (ListItem itemRole in chksRoles.Items)
{
if (itemRole.Selected)
{
objUser.Roles.Add(RoleManager.Get(new Guid(itemRole.Value)));
}
}
我有一个UserRole表的关联,它只包括ObjRole和ObjUser列。下面是我的问题
1)当我创建一个新用户并为其设置多个角色时,我能够插入一个新记录。但是,当我试图通过更改其角色来更新现有用户时,它不会更新关联,事实上,什么都没有发生。用户的角色仍然是相同的。
2)如果在创建新角色时不想创建新用户,如何设置级联?原因是当我创建一个新角色时,这个角色中将没有用户。
我试图用hasmanymany映射来解决这个问题,因为我不存储任何其他字段在UserRole表中,所以我不认为有必要在用户和角色表中使用2一对多映射来处理它。
如果有人能帮助我,我将不胜感激:)从昨天晚上开始我就一直在做这件事。非常感谢。这是一个与反向设置相关的问题。解决方案非常简单——遵循良好的实践。
在这种情况下,设置关系的两边 - always:var role = RoleManager.Get(new Guid(itemRole.Value));
objUser.Roles.Add(role);
role.Users.Add(objUser);