2014-09-19 3 views
3

참조하는 열이 두 번째 테이블의 기본 키 열이 아닌 경우 nhibernate에서 일대일 관계를 매핑하는 방법을 찾는 중입니다. 예를 들어코드로 Nhibernate 일대일 매핑

은 두 개의 테이블이 PersonId에 1-1 관계가

Person Table 
    PersonId (pk) 
    Name 

Passport Table 
    PassportId (pk) 
    Country 
    PersonId 

을 고려하십시오.

내 Nhibernate 모델은 다음과 같습니다. 다음과 같이 설명 양식 this article을 바탕으로

public class Person 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Passport Passport { get; set; } 
} 

public class Passport 
{ 
    public virtual int Id { get; set; } 
    public virtual string Country { get; set; } 
    public virtual Person Person { get; set; } 
} 

나는 관계 매핑을 정의했지만 작동하지 않았다

PersonMapping :

OneToOne(x => x.Passport, x => x.Cascade(Cascade.All)); 

PassportMapping :

ManyToOne(x => x.Person, x => { x.Unique(true); x.Column("PersonId");}); 

가 건설하고있다 다음과 같은 SQL 쿼리 :

select * from Person 
left outer join Passport on Persson.PersonId = Passport.PassportId. 

PassportId와 PersonId가 동일한 값을 가지고 있다고 가정하지만, 내 경우에는 다릅니다. 어떻게하면 코드로 매핑을 사용하여 매핑을 정의 할 수 있습니까? 사람에 대한 매핑 :

HasOne(x=>x.Passport).Cascade.All(); 

과 여권 :

References(x => x.Person).Unique(); 

희망

답변

2

나는 내가 매핑의 이러한 종류의 일을하고 방법을 보여줍니다, 내 게시물이 도움이 될 수 있기를 바랍니다 이것은 도움이됩니다. 새 레코드를 생성 할 때 나중에, 예를 들어이 작업을 수행 :이 ansver 유창한 NHibernate에 사용하고

var person = new Person(); 
person.Passport = new Passport(){Person = person}; 
+0

하지만 문제는 코드 매핑을위한 것입니다. – Luka