NHibernate 中的多对多映射 [英] many-to-many mapping in NHibernate
问题描述
我希望使用 NHibernate 创建多对多关系.我不确定如何将这些映射到 XML 文件中.我还没有创建这些类,但它们只是基本的 POCO.
I'm looking to create a many to many relationship using NHibernate. I'm not sure how to map these in the XML files. I have not created the classes yet, but they will just be basic POCOs.
人物
个人ID
姓名
Person
personId
name
能力
能力ID
标题
Competency
competencyId
title
Person_x_Competency
个人ID
能力 ID
Person_x_Competency
personId
competencyId
我是否会在每个 POCO 中为另一个类创建一个列表?然后使用 NHibernate 配置文件以某种方式映射那些?
Would I essentially create a List in each POCO for the other class? Then map those somehow using the NHibernate configuration files?
推荐答案
您可以将多对多关系置于任一类,甚至两者.这取决于您的域模型.如果将其映射到两者,则其中之一是反向的.
You can put the many-to-many relation to either class, or even to both. This is up to your domain model. If you map it to both, one of them is inverse.
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>
仅在您确实需要时才将其设为双向.
Only make it bidirectional if you really need it.
顺便说一句:最好先编写类,然后再创建数据库设计.可以从映射文件中导出数据库.这非常有用.
By the way: it is much better to write the classes first and create the database design afterwards. The database can be exported from the mapping files. This is very useful.
这篇关于NHibernate 中的多对多映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!