我有两张表,它们之间是多对多的关系。
public class User
{
public virtual Guid Id { get; set; }
public virtual UInt64 UserId { get; set; }
public virtual IList<Group> Groups{ get; set; }
}
public class Group
{
public virtual Guid Id { get; set; }
public virtual Guid GroupGuid { get; set; }
public virtual IList<User> Users{ get; set; }
}
我使用Fluent NHibernate进行以下自动映射:
.Override<User>(obj => obj.HasManyToMany(x => x.Groups).Table("UserToGroup").Cascade.AllDeleteOrphan())
.Override<Group>(obj => obj.HasManyToMany(x => x.Users).Table("UserToGroup").Cascade.AllDeleteOrphan().Inverse())
当我添加一个包含组列表的用户时,所有表都更新成功: 在User表中插入新用户。OK 在Group表中插入新组。OK 在UserToGroup表中插入新关系。OK
我使用以下代码添加用户(包括组):
public void AddUser(User userData, IList<Guid> groupIds)
{
User user = new User();
user.UserId = userData.UserId;
IList<User> Users = new List<Users();
Users.Add(user);
IList<Group> groups = new List<Group>();
foreach (Guid groupId in groupIds)
{
Group grp = new Group();
grp.GroupGuid = groupId;
grp.Users = Users;
groups.Add(grp);
}
user.Groups = groups;
Session.Save(user);
}
问题: 当我添加一个包含已经存在于Group表中的GroupGuid的新用户时,会在Group表中插入一个具有相同GroupGuid和新ID的新记录。
问题:
1.如何使NHibernate仅向Group表添加新的GroupGuid id?并仍然在UserToGroup表中添加一个关系,将新用户与现有组相关联。
2.在AddUser方法中,我应该设置实体的两个方面吗?即设置user.Groups为group列表,并设置group.Users为user列表?
谢谢, Haimon。