2012-03-05 1 views
3

NHibernate 3.2 built-in mapping by code api () (유창 NHibernate)을 배우려고합니다. 일대일로 (또는 0으로) 관계를 매핑 할 수 있도록 도와주세요.코드에 의한 NHibernate 3.2 매핑에서의 일대일 매핑

참고 : 나는 SOF를 검색하는 질문을 봤는데, 모든 예제에서는 Fluent API 또는 xml을 사용하고 있습니다. NHibernate 3.2에 내장 된 매핑 API를 사용하려고합니다.

public class Person { 
    public virtual int Id { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 

    // can be null 
    public virtual Address Address { get; set; } 
} 

public class Address { 
    public virtual int Id { get; set; } 
    public virtual string Line1 { get; set; } 
    public virtual string Line2 { get; set; } 
    public virtual string City { get; set; } 

    // can not be null 
    public virtual Person Person { get; set; } 
} 

고맙습니다.

UPDATE :

기본 키 전략은 여기에 있습니다 :

Id( 
    t => t.Id, 
    t => { 
     t.Generator(Generators.HighLow, g => g.Params(new { max_low = 100 })); 
     t.Column(typeof(TEntity).Name + "Id"); 
    }); 
+1

는 우리가 좀 더 질문을 이해하는 데 도움이 될 수 있습니다 원하는 XML을 게시. – Rippo

+0

감사합니다. 나는 NH에 처음 왔고 xml이나 Fluent에 대해서 잘 모릅니다. Q를 업데이트하고 기본 키 전략을 추가합니다. 감사합니다. –

답변

5

실제로 일대일지도 또는 다 대일지도를 want- 내용에 따라 답변 수 있습니다 당신의 문제. 진정한 고유 한 양방향 제약이 필요한 경우이 링크를 참조하십시오 : http://notherdev.blogspot.com/2012/01/mapping-by-code-onetoone.html

1 대 1은 일반적으로 하나의 테이블에 모든 열을 넣는 것이 좋습니다. 거의 모든 경우를 처리하고 도메인에서 별도의 엔터티가 필요할 경우 구성 요소 매핑을 통해 구분합니다. 도메인과 데이터 모델에서 이들을 분리하는 일반적인 방법은 다차원을 사용하여 부모에게 백업하는 고유 한 제한 조건을 사용하는 것이고 이것은 일반적인 패턴입니다.

는 일반적으로 3.2 매핑에 대한 도움말과 힌트를 들어,이 자원은 나를 위해 도움의 톤되었습니다 http://notherdev.blogspot.com/2012/02/nhibernates-mapping-by-code-summary.html

+0

'일대일은 보통 나쁜 전략입니다. 왜냐하면 ...'감사합니다. 나는 너의 대답에서 좋은 생각을 얻는다. 답변이 투표로 채택되었습니다. 문안 인사. –