NHibernate中的多对多映射
我希望使用NHibernate创建多对多关系。我不知道如何将这些映射到XML文件中。我还没有创建这些类,但它们只是基本的POCO 桌子 人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
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”吗?