通过使用NHibernate连接表映射元素

通过使用NHibernate连接表映射元素,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,这是我以前做过很多次的事情,但我现在脑子里一片空白,我会尝试简单地概述一下我目前的情况 我目前有3个表,如下所示: Office > id, name Person > id, name Office_Personnel > office_id, person_id 然后,我有了个人(id、姓名)和办公室的模型,但是办公室模型包含人员信息: public class Office { int Id {get;set;} string Name {get;set;} IC

这是我以前做过很多次的事情,但我现在脑子里一片空白,我会尝试简单地概述一下我目前的情况

我目前有3个表,如下所示:

Office > id, name
Person > id, name
Office_Personnel > office_id, person_id
然后,我有了个人(id、姓名)和办公室的模型,但是办公室模型包含人员信息:

public class Office
{
 int Id {get;set;}
 string Name {get;set;}
 ICollection<Person> Personnel {get;set;}
}
公共班级办公室
{
int Id{get;set;}
字符串名称{get;set;}
i收集人员{get;set;}
}
映射人很容易,但现在我有点困惑,为什么office不能正确映射。我在绘制人员地图时选择了一个集合,因为不应该有任何重复,但是它似乎不像我预期的那样工作

<set name="Personnel" table="office_personnel" cascade="all">
  <key column="office_id" />
  <one-to-many class="Person"/>
</set>

现在有一件事让我感到奇怪,那就是没有任何迹象表明什么人应该被绑定到(person_id)。它一直试图在Person表中查找*office\u id*列

我相信这只是一个简单的问题,我是一个白痴,但任何帮助都将是伟大的


另一方面,我正在考虑是否需要一个中间人表,因为我可以直接在Person表中放置Office_Id列,但我不能100%确定在我的实际项目中Person类是否可以位于更远处的多个办公室…

为了正确地映射这一点,您需要有3个实体:

Person 1 <-> n Personnel n <-> 1 Office
人员1人员1办公室
或者使用联接表将其映射为多对多关联(参见hibernate文档的第8.3节)

人与办公室

为了正确映射,您需要有3个实体:

Person 1 <-> n Personnel n <-> 1 Office
人员1人员1办公室
或者使用联接表将其映射为多对多关联(参见hibernate文档的第8.3节)

人与办公室

要匹配他的模型,后者更合适。要匹配他的模型,后者更合适。