【发布时间】:2012-06-05 15:52:45
【问题描述】:
我有 2 个具有多对多关系的表。
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())
当我添加一个包含组列表的用户时,所有表都更新了: 在用户表中插入新用户。好的 在组表中插入新组。好的 在 UserToGroup 表中插入新关系。好的
我使用以下代码添加用户(包括组):
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。
问题:
如何让 NHibernate 只向组表添加新的 GroupGuid id?并仍然在 UserToGroup 表中添加一个关系,将新用户与现有组相关联。
在 AddUser 方法中 - 我应该用实体设置双方,即用组列表设置 user.Groups 并用用户列表设置 group.Users 吗?
谢谢, 海蒙。
【问题讨论】:
-
您能否显示为用户填充组的代码?
-
@MartinErnst 您可以在“我使用以下代码添加用户(包括组):”之后的代码中看到组人口:
标签: nhibernate fluent-nhibernate many-to-many