NHibernate中的多对多映射

时间:2010-04-27 14:27:36

标签: nhibernate nhibernate-mapping many-to-many xml-configuration

我希望使用NHibernate创建多对多的关系。我不确定如何在XML文件中映射这些。我还没有创建类,但它们只是基本的POCO。


PERSONID
名称

能力
competencyId
标题

Person_x_Competency
PERSONID
competencyId

我是否会在每个POCO中为其他类创建一个List?然后使用NHibernate配置文件以某种方式映射它们?

1 个答案:

答案 0 :(得分:23)

您可以将多对多关系放在任一类中,甚至两者之间。这取决于您的域模型。如果将它映射到两者,则其中一个是反向的。

class Person
{
  // id ...
  IList<Competency> Competencies { get; private set; }

  // you domain model is responsible to manage bidirectional dependencies.
  // of course this is not a complete implementation
  public void AddCompetency(Competency competency)
  {
    Competencies.Add(competency);
    competency.AddPerson(this);
  }
}

class Competency
{
  // id ...
  IList<Person> Persons { get; private set; }
}

映射:

<class name="Person">
  <id ....>
  <bag name="Competencies" table="Person_x_Competency">
    <key column="personId"/>
    <many-to-many class="Competency" column="competencyId"/>
  </bag>
</class>

<class name="Competency">
  <id ....>
  <bag name="Persons" table="Person_x_Competency" inverse="true">
    <key column="competencyId"/>
    <many-to-many class="Person" column="personId"/>
  </bag>
</class>

如果你真的需要它,只能使它成为双向的。

顺便说一句:首先编写类并在之后创建数据库设计要好得多。可以从映射文件导出数据库。这非常有用。