내 도메인 엔티티 각각은 런타임에 추가 할 수있는 "고정"속성 세트와 "동적"속성 세트를 가지고 있습니다. 나는 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의 지원은 무엇입니까? 유일한 어려움은 고객의 모든 "유형"이 동일한 고객 클래스에 매핑된다는 것입니다.
준 동적이기 때문에 하위 클래스가 될 수 없습니다. 런타임 중에 매핑을 다시 작성하는 등 새로운 유형의 Person을 만들어야합니다. NHibernate가 discriminator를 사용하여 두 개의 하위 클래스를 3 개의 테이블로 매핑 할 수있게 해주는 것처럼, discriminator가 특정 방식 일 때만 특정 매핑을 사용하고 싶습니다. 그것의 어색한, 나는 우리에게 필요한 몇 가지 매우 구체적인 제약 조건을 안고 있지만 필요하다. 불행히도 NH는 ORM 준 동적 또는 그렇지 않은 최상의 ORM이다. –