NHibernate映射多对多连接表

Dav*_*ans 3 nhibernate nhibernate-mapping

我的数据库结构如下所示:

Person
  Id
  Name
  FieldA
  FieldB

Phone
  Id
  Number

PersonPhone
  PhoneId
  PersonId
  IsDefault
Run Code Online (Sandbox Code Playgroud)

我对人物和电话对象的NHibernate映射是直截了当的,它的PersonPhone我很难用.我希望将PersonPhone对象的集合作为Person的属性,这将允许我拥有一个人的电话号码,并且能够分辨哪个是某个人的"默认"或主要电话号码.

理想情况下我喜欢我的PersonPhone对象看起来像这样:

public class PersonPhone
{
    public virtual Person Person { get; set; }
    public virtual Phone Phone { get; set; }
    public virtual bool IsDefault { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我对此表的NHibernate映射如下所示:

<class name="PersonPhone" table="PersonPhone">
    <composite-id>
        <key-property name="Person" column="PersonId" />
        <key-property name="Phone" column="PhoneId" />
    </composite-id>
    <property name="IsDefault" column="IsDefault"/>
</class>
Run Code Online (Sandbox Code Playgroud)

但是当NHibernate编译我的映射时,我得到一个错误说:

无法编译映射文档:MyApp.Entities.PersonPhone.hbm.xml.NHibernate.MappingException:无法确定类型:MyApp.Entities.Person,MyApp.Entities,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null,对于列:NHibernate.Mapping.Column(PersonId)

关于如何映射的任何想法?

Dav*_*ans 6

答案是使用复合键中的元素而不是键属性

<class name="PersonPhone" table="PersonPhone">
    <composite-id>
        <key-many-to-one name="Person" column="PersonId"></key-many-to-one>
        <key-many-to-one name="Phone" column="PhoneId"></key-many-to-one>
    </composite-id>
    <property name="IsDefault" column="IsDefault"/>
</class>
Run Code Online (Sandbox Code Playgroud)