2011-01-21 146 views
1

我在NHibernate中遇到了一對一的關係問題。是我的對象的結構如下: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」。

+0

請添加其他部分類。 – 2011-01-21 14:22:36

回答

0

你不必在一個EmployeeDataContext PERSONID屬性。

您應該有一個PersonDataContext類型的PersonDataContext屬性,這就是param中的內容。

+0

非常感謝您的回覆。我在EmployeeDataContext中添加了一個PersonDataContext屬性,並更改了該參數。這些更改後拋出異常:嘗試從空一對一屬性分配ID:人(人是我的屬性名稱) – 2011-01-21 18:59:27

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>