NHibernate - 一对一的关系

时间:2011-01-21 14:10:09

标签: nhibernate nhibernate-mapping

我在NHibernate中遇到一对一关系的问题。我的对象的结构如下:

public partial class PersonDataContext
{
    protected int _personid;
    protected string _name;
    protected EmployeeDataContext _employee;
}



public partial class EmployeeDataContext
{
    protected int _personid;
    protected string _payrollno;
}

在我的模型中,每个PersonDataContext必须只包含一个EmployeeDataContext,并且存在的每个EmployeeDataContext都是PersonDataContext的一部分。这是一种普遍的一对一关系。

现在,到映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="PersonDataContext, DAL" table="`Person`" lazy="false">
        <id name="PersonId" column="`PersonId`" type="int">
            <generator class="native" />
        </id>
        <property type="string" name="name" column="`name`" />
        <one-to-one name="Employee" cascade="save-update" class="EmployeeDataContext,DAL" />
    </class>
</hibernate-mapping>


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="EmployeeDataContext, DAL" table="`Employee`" lazy="false">
        <id name="PersonId" column="`PersonId`">
            <generator class="foreign">
                <param name="property" >PersonId</param>
            </generator>
        </id>
        <property type="string" length="30" name="PayRollNo" column="`PayRollNo`" />
    </class>
</hibernate-mapping>

然后我创建一个PersonDataContext,它自己创建一个EmployeeDataContext。然后,当我保存它时,NHibernate抛出异常,“无法解析属性:PersonId”。

2 个答案:

答案 0 :(得分:0)

外来属性错误,将'PersonId'修改为'PersonDataContext',如下所示:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
     <class name="EmployeeDataContext, DAL" table="`Employee`" lazy="false">
         <id name="PersonId" column="`PersonId`">
             <generator class="foreign">
                 <param name="property" >**PersonDataContext**</param>
             </generator>
         </id>
         <property type="string" length="30" name="PayRollNo" column="`PayRollNo`" />
     </class>
</hibernate-mapping>

答案 1 :(得分:0)

您在EmployeeDataContext中没有PersonId属性。

你应该有一个PersonDataContext类型的PersonDataContext属性,这就是参数中的内容。