2011-11-18 10 views
0

2 개의 테이블 (Labor and LabourPosition)이 있습니다. Labor 테이블의 LabourPosition 테이블에 fki가있는 대신 getLabourPosition(theLabourer.LabourPositionId) 대신 (theLabourer.LabourPosition.Name 개체를 사용하고 싶습니다.Fluent NHibernate와 1 : 1 매핑이 작동하지 않습니다.

이 작업을 수행하는 몇 가지 기사를 읽었지만 나에게 효과적이지 않은 것처럼 보입니다 ... LabourPosition 속성의 값을 보려고 할 때 나타나는 오류는 "프록시를 초기화 할 수 없습니다 - 아니요 세션".

내 매핑 (PS : LabourPosition가 다시 노동하는 한 가지 방법 만 전경련이 없음) : LabourMap 클래스 : 분명히 다음

References<LabourPosition>(x => x.LabourPosition, "LabourPositionsId"); 

그리고 나는 노동 단체 등의 속성을 정의한를 :

public virtual LabourPosition LabourPosition { get; set; } 

아이디어가 있으십니까? 도와 주시면 감사하겠습니다! fluent mapping 문서에서

답변

2

hasOne의/hasOne의 보통 특별한 경우를 위해 예약되어 일대일

. 일반적으로 대부분의 상황에서 참조 관계를 사용합니다 (참조 : 사용자가 대다수를 의미하는 것으로 봅니다). 실제로 일대일로 작업하려면, HasOne 메소드를 사용할 수 있습니다.

HasOne (x => x.Cover);

참조를 사용하려면 (코드에서 알 수있는 것처럼) 관계의 양면을 매핑해야합니다. 문서에서 :

hasMany의/일대

hasMany의 아마 당신이 사용하는거야 가장 일반적인 컬렉션베이스의 관계이다. HasMany는 References 관계의 "반대편"이며 "한쪽"(한 명의 작성자는 많은 권의 책이 있음)에 적용됩니다. 이제 위의 시작한 관계의 저자 측을 매핑 해 봅시다. 해당 저자와 관련된 모든 서적을 콜렉션으로 반환하는 서적 테이블에 가입해야합니다.

공개 클래스 작성자 {public IList Books {get; 세트; }} 우리는 관계의 측면 매핑 AuthorMap 생성자에 hasMany의 방법을 사용 :

hasMany의 (X => x.Books)를; References와 마찬가지로 외래 키의 기본값은 Author_id이며, KeyColumn 메서드로 외래 키를 재정의하거나 을 협약의 기본 동작으로 변경할 수 있습니다.

사용할 수있는 컬렉션에는 몇 가지 유형이 있으며, 모두 이며 모두 HasMany 호출에서 사용할 수 있습니다.

왜 모든 열을 단일 테이블로 유지하는 대신 1 대 1 관계가 필요한가요?당신의 매핑에

0

시도

References(x => x.LabourPosition, "LabourPositionsId");