如何与nhibernate保持多对多关系同步?

如何与nhibernate保持多对多关系同步?,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我正在为员工和部门两个对象创建数据模型。员工有一个部门列表,部门有一个员工列表 class Employee{ private IList<Department> _departments; public Employee() { _departments = new List<Department>(); } public virtual ReadOnlyCol

我正在为员工和部门两个对象创建数据模型。员工有一个部门列表,部门有一个员工列表

    class Employee{
             private IList<Department> _departments;
       public Employee()
       {
          _departments = new List<Department>();
       }
       public virtual ReadOnlyCollection<Department> Departments{
          get {return new ReadOnlyCollection<Department>(_departments);}
       }
     }

    class Department{
             private IList<Employee> _employees;
       public Department()
       {
          _departments = new List<Employee>();
       }
       public virtual ReadOnlyCollection<Employee> Employees{
          get {return new ReadOnlyCollection<Employee>(_employees);}
       }
     }

但是它没有像我预期的那样工作。有人能帮忙吗。

这是我如何处理这些关系的一个例子:

public class User
{
    private IList<Group> groups;
    public virtual IEnumerable<Group> Groups { get { return groups.Select(x => x); } }

    public virtual void AddGroup(Group group)
    {
        if (this.groups.Contains(group))
            return;

        this.groups.Add(group);
        group.AddUser(this);
    }

    public virtual void RemoveGroup(Group group)
    {
        if (!this.groups.Contains(group))
            return;

        this.groups.Remove(group);
        group.RemoveUser(this);
    }
}
我的
映射如下所示:

public class GroupMap : ClassMap<Group>
{
    public GroupMap()
    {
        //Id, Table etc have been omitted

        HasManyToMany(x => x.Users)
            .Table("USER_GROUP_COMPOSITE")
            .ParentKeyColumn("GROUP_ID")
            .ChildKeyColumn("USER_ID")
            .Access.CamelCaseField();
    }
}
公共类组映射:类映射
{
公共组映射()
{
//省略了Id、表格等
HasManyToMany(x=>x.Users)
.表格(“用户组组合”)
.ParentKeyColumn(“组ID”)
.ChildKeyColumn(“用户ID”)
.Access.CamelCaseField();
}
}

我在下面发布了一个关于如何处理这些场景的示例,但为什么您的代码不能按预期工作?您期望的是什么?当我试图像db.session.save(Employee)那样保存时,它会导致循环依赖;员工有部门,部门内部有员工,等等。。它是圆形的。我不确定这是否正确。如果我错了,有人能纠正我吗?我的做法完全相同,至少这将样板代码与应用程序代码分开,并给您一个单一的故障点。您甚至可以向Group类中添加方便的方法(Add,Remove)来删除用户。@SebastianEdelmeier,该类中有一些方法可以做到这一点。add和remove都调用上述代码中
组中的那些方法。
public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        //Id, Table etc have been omitted

        HasManyToMany(x => x.Groups)
            .Table("USER_GROUP_COMPOSITE")
            .ParentKeyColumn("USER_ID")
            .ChildKeyColumn("GROUP_ID")
            .Access.CamelCaseField()
            .Cascade.SaveUpdate()
            .Inverse()
            .FetchType.Join();
    }
 }
public class GroupMap : ClassMap<Group>
{
    public GroupMap()
    {
        //Id, Table etc have been omitted

        HasManyToMany(x => x.Users)
            .Table("USER_GROUP_COMPOSITE")
            .ParentKeyColumn("GROUP_ID")
            .ChildKeyColumn("USER_ID")
            .Access.CamelCaseField();
    }
}