2011-01-21 4 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> 

은 그 때 나는 자체 EmployeeDataContext에 의해 생성하는 PersonDataContext을 만들 수 있습니다. 그런 다음 NHibernate가 예외를 throw 할 때 "속성을 확인할 수 없습니다 : PersonId"를 throw합니다.

+0

다른 부분 클래스를 추가하십시오. –

답변

0

당신은 EmployeeDataContext에서 PersonId 속성이 없습니다.

PersonDataContext 유형의 PersonDataContext 속성이 있어야하며이 속성은 param에 포함됩니다.

+0

답장을 보내 주셔서 감사합니다. EmployeeDataContext에 PersonDataContext 속성을 추가하고 해당 매개 변수도 변경했습니다. 이 변경 후에 예외 사항을 던졌습니다 : null 일대일 속성에서 ID를 할당하려고했습니다 : Person (Person은 나의 속성 이름입니다) –

+0

저장하기 전에 Person을 지정해야합니다 ... –

+0

제안 : http : // www. nhforge.org/doc/nh/ko/index.html#mapping-declaration-onetoone –

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>