Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate中的多对多映射_Nhibernate_Nhibernate Mapping_Many To Many_Xml Configuration - Fatal编程技术网

NHibernate中的多对多映射

NHibernate中的多对多映射,nhibernate,nhibernate-mapping,many-to-many,xml-configuration,Nhibernate,Nhibernate Mapping,Many To Many,Xml Configuration,我希望使用NHibernate创建多对多关系。我不知道如何将这些映射到XML文件中。我还没有创建这些类,但它们只是基本的POCO 桌子 人 personId 名字 能力 竞争优势 头衔 个人能力 personId 胜任 我会在每个POCO中为另一个类创建一个列表吗?然后以某种方式使用NHibernate配置文件映射这些对象?您可以将多对多关系放在任意一个类上,甚至放在两个类上。这取决于您的域模型。如果将其映射到两者,则其中一个是反向的 class Person { // id ... I

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

桌子
personId
名字

能力
竞争优势
头衔

个人能力
personId
胜任


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

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

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; }
}
班级人员
{
//身份证。。。
IList能力{get;private set;}
//您的域模型负责管理双向依赖关系。
//当然,这不是一个完整的实现
公共能力(能力)
{
能力。添加(能力);
能力。添加人员(本);
}
}
班级能力
{
//身份证。。。
IList 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>

只有当你真的需要它的时候,才让它双向


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

我想我真的不明白为什么我会或不会需要双向,以及在不需要时使用它会产生什么影响。这取决于您需要在模型中“导航”哪些属性路径。你是否经常想了解一个人的能力?很可能你会的,所以让这个人具备这些能力是个好主意。您是否经常需要了解所有具有特定能力的人员?我猜这是一个例外,也可以通过查询找到。第二类映射中的包的名称不应该是“Persons”而不是“capabilities”吗?