10

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

人员
personId
姓名

能力 能力
Id
标题

Person_x_Competency
人员 ID
能力ID

我是否会在每个 POCO 中为另一个类创建一个列表?然后以某种方式使用 NHibernate 配置文件映射那些?

4

1 回答 1

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>

仅在您确实需要时才将其设为双向。

顺便说一句:最好先编写类,然后再创建数据库设计。数据库可以从映射文件中导出。这非常有用。

于 2010-04-27T14:34:10.337 回答