2010-04-06 5 views
0

이 특정 질문에 대한 답을 찾을 수 없습니다. 가능한 경우 도메인 모델을 객체 지향으로 유지하고 객체를 다시 사용하려고합니다. 단일 행에서 여러 클래스에 매핑을 제공하는 방법을 결정하는 데 문제가 있습니다. 예를 들어 설명해 드리겠습니다.NHibernate : 단일 테이블 행에서 여러 클래스 매핑하기

저는 하나의 테이블을 가지고 있는데, 고객이라고 부릅니다. 고객은 여러 가지 특성을 가지고 있습니다. 간결하게하기 위해 ID, 이름, 주소, 도시, 주, 우편 번호가 있다고 가정합니다.

I는 다음과 같이 고객과 주소 클래스를 만들고 싶습니다 :

내가 매핑 Customer 클래스 내에서 주소 클래스 일 것입니다 무슨 결정하는 데 문제가 있어요 무엇
public class Customer { 
    public virtual long Id {get;set;} 
    public virtual string Name {get;set;} 
    public virtual Address Address {get;set;} 
} 

public class Address { 
    public virtual string Address {get;set;} 
    public virtual string City {get;set;} 
    public virtual string State {get;set;} 
    public virtual string ZipCode {get;set;} 
} 

. 주소 테이블이없고 고객과 관련된 "세트"의 주소가 없습니다. 코드에서 Customer 테이블에 대해보다 객체 지향적 인 뷰를 원합니다. 주소 정보가 들어있는 여러 테이블이 있으며 재사용 가능한 Address 클래스를 사용하여 처리하는 것이 좋습니다. 주소가 공유되지 않기 때문에 모든 주소를 외래 키가있는 별도의 테이블로 분할하는 것은 과도한 것으로 보이며 여러 테이블에 외래 키가 필요하기 때문에 실제로는 더 고통 스럽습니다.

누군가가이 유형의 매핑을 통해 나를 깨우칠 수 있습니까? 가능한 경우 예를 제공해주십시오.

모든 통계를 제공해 주셔서 감사합니다.

- 마이클

답변

8

NHibernate 매핑 파일에 Component를 사용해야합니다. 예를 들어 :

<class name="Customer" 
table="Customer"> 

<id name="Id"> 
    <generator class="identity"/> 
</id> 
<property name="Name" /> 
<component name="Address"> 
    <property name="Address"/> 
    <property name="City"/> 
    <property name="State"/> 
    <property name="ZipCode"/> 
</component> 
</class> 

Ayende's blog에 대해 읽을 수 있습니다.

+0

구성 요소가 인터페이스 또는 추상 유형이어야 할 때 구성 요소를 매핑하는 방법은 무엇입니까? 예 : IPayment의 모든 구현이 신용 카드를 포함하지는 않습니다 #. –

관련 문제