NHibernate具有相同类的多对多

时间:2013-06-08 17:28:14

标签: c# nhibernate orm many-to-many nhibernate-mapping

如果以前已经回答过,请道歉。我试过谷歌但找不到答案。

目前我有一个班级

public class User
{
    public virtual string Username { get; set; }
    public virtual string Name { get; set; }

    public virtual ISet<User> Teamleaders { get; set;}
    public virtual ISet<User> Staff { get; set;}
}

teamLeaders存储此用户拥有的所有团队负责人。 员工存储团队领导者的所有员工。

这是多对多的关系。

目前我的XML文件如下所示

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               assembly="SDReward"
               namespace="SDReward.Domain">
  <class name="User">
    <id name="Username" />
    <property name="Name" />

  </class>
</hibernate-mapping>

我已经使用了以下数据。它从teamleaderstaff表中获取数据

<set name="Teamleaders" table="teamleaderstaff">
  <key column="TeamleaderId" />
  <many-to-many column="UserId" class="User" />
</set>

<set name="Staff" table="teamleaderstaff">
  <key column="UserId" />
  <many-to-many column="TeamleaderId" class="User" />
</set>

但是当我进行插入时,它会将它们插入到数据库中...例如,如果我向用户添加1个团队负责人并将该用户添加为团队负责人的工作人员,则会使用相同的数据进行2次插入。

1 个答案:

答案 0 :(得分:2)

您案例中的多对多映射可能看起来像

<set name="Teamleaders" table="teamleaderstaff" lazy="true">
  <key column="UserId"/>
  <many-to-many class="User" column="TeamleaderId"/>
</set>


<set name="Staff" table="teamleaderstaff" lazy="true" inverse="true" >
  <key column="TeamleaderId"/>
  <many-to-many class="User" column="UserId"/>
</set>

1)区别在于<key column映射。

2)在insert期间,其中一个(Staff)集合被标记为inverse="true",因此不会触发双重插入