2010-04-15 3 views
2

내 도메인 엔티티 각각은 런타임에 추가 할 수있는 "고정"속성 세트와 "동적"속성 세트를 가지고 있습니다. 나는 NHibernate의 동적 컴포넌트 기능을 사용하여 이것을 처리한다.NHibernate : 판별자를 기반으로 다른 동적 컴포넌트 매핑

public class Product { 
    public virtual Guid Id { get; } 
    public virtual string Name { get; set;} 
    public virtual IDictionary DynamicComponents { get; } 
} 

는 지금은 CustomerType이 "온라인" 또는 "InPerson" 같은 것입니다 다음과 같은 상황

public class Customer { 
    public virtual Guid Id { get; } 
    public virtual string Type { get; set;} 
    public virtual IDictionary DynamicProperties { get; } 
} 

있습니다. 또한 온라인 고객은 동적 속성을 "이름""하여 IPAddress"을 가지며 InPerson 고객은 동적 속성 "이름""세일즈맨" 있습니다.

어떤 고객 유형을 사용할 수 있으며 추가 속성은 응용 프로그램 시작시 hbm 파일을 생성하는 데 사용되는 메타 데이터에 구성됩니다.

중간 DTO 레이어를 사용하여 이것을 두드리는 방법을 알아낼 수는 있지만이 시나리오에 대한 NHibernate의 지원은 무엇입니까? 유일한 어려움은 고객의 모든 "유형"이 동일한 고객 클래스에 매핑된다는 것입니다.

답변

0

어리석은 질문 일지 모르지만 고객의 하위 클래스를 두 개 사용하는 이유는 무엇입니까?

그 외에도 NHibernate가 지원하고자하는 것이 무엇인지는 즉시 내게 명확하지 않습니다. "이 시나리오에 대한 NHibernate의 모든 지원"이 의미하는 바를 NHibernate가 당신을 위해 무엇을하기를 원하는지 명확히 할 수 있습니까?

+0

준 동적이기 때문에 하위 클래스가 될 수 없습니다. 런타임 중에 매핑을 다시 작성하는 등 새로운 유형의 Person을 만들어야합니다. NHibernate가 discriminator를 사용하여 두 개의 하위 클래스를 3 개의 테이블로 매핑 할 수있게 해주는 것처럼, discriminator가 특정 방식 일 때만 특정 매핑을 사용하고 싶습니다. 그것의 어색한, 나는 우리에게 필요한 몇 가지 매우 구체적인 제약 조건을 안고 있지만 필요하다. 불행히도 NH는 ORM 준 동적 또는 그렇지 않은 최상의 ORM이다. –

0

나는 당신이 당신의 서브 클래스에서 ... 동적 속성을 사용하여 해결책을 찾기 같은 IPAddress { get { return DynamicProperties["ipAddress"] as IPAddress; } } 같은 동적 속성을 참조 할 수 있다고 생각

나를 위해

재미있는 부분은 같은 방법으로 이러한 속성을 매핑 할 방법입니다 확장 가능 ...

다른 솔루션을 생각해 냈습니까?