C# NHibernate多对多映射更新关联表

C# NHibernate多对多映射更新关联表,c#,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我正在尝试使用NHibernate 4和Fluent NHibernate 2设置多对多映射。这是一种简单的用户和角色关系。一个用户可能有多个角色,一个角色可能有多个用户。结构如下 使用者 角色地图 Id(x => x.Id).Column("Id").GeneratedBy.Assigned(); Map(x => x.Name); HasManyToMany(x => x.Users) .Cascade.None() .Table("UserRole")

我正在尝试使用NHibernate 4和Fluent NHibernate 2设置多对多映射。这是一种简单的用户和角色关系。一个用户可能有多个角色,一个角色可能有多个用户。结构如下

使用者

角色地图

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) 如果在创建新角色时不想创建新用户,如何设置级联?原因是,当我创建一个新角色时,将不会有任何用户处于此角色中

我正在尝试使用hasmanytomany映射来解决这个问题,因为我没有在UserRole表中存储任何其他字段,所以我认为没有必要在User表和Role表中使用2个一对多映射来处理它


如果有人能在这方面提供帮助,我将不胜感激:)从昨天晚上开始,我就一直在做这件事。非常感谢。

这是一个与反向设置相关的问题。而且解决方案非常简单-遵循良好实践

在这种情况下,设置关系的两侧,始终:

var role = RoleManager.Get(new Guid(itemRole.Value));
objUser.Roles.Add(role);
role.Users.Add(objUser);

我在我的代码中尝试了这个,但它不起作用。谢谢
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)));
     }
}
var role = RoleManager.Get(new Guid(itemRole.Value));
objUser.Roles.Add(role);
role.Users.Add(objUser);