2010-12-28 3 views
1

기본 클래스가 하나의 엔티티 인 다음 다른 엔티티가 다른 기본 클래스에서 파생되는 시나리오가 있습니다. 둘 다 내 도메인에서 의미가 있으며 따로 사용할 수 있습니다. 나는 기본 클래스의 사본을 가져 오기 할 때nhibernate를 통해 기본 클래스를로드하면 파생 클래스의 매핑이 잘못 사용됩니다.

public class MyBaseClassMap : ClassMap<MyBaseClass> 
{ 
    Id("MyBaseClassID"); 
    Map(x => x.Name); 
} 

public class MyChildClassMap : SubclassMap<MyChildClass> 
{ 
    Map(x => x.AdditionalField); 
} 

은 무엇 일어나고있는 것은, 그것의 하위 클래스에 대한 매핑을 사용하고 있습니다 :

public class MyBaseClass 
{ 
    int ID { get; set; } 
    string Name { get; set; } 
} 

public class MyChildClass 
{ 
    string AdditionalField { get; set; } 
} 

는 둘 다 같은 유창함 nHibernate 수 사용 ClassMap를 사용하여 매핑 한 . 마치 기본 클래스와 하위 클래스의 차이점을 알지 못하는 것 또는 잘못된 클래스 매핑을 선택하는 것입니다. SQL 문과 자식 테이블에 대한 조인을 관찰하고 추가 열을 가져 와서 확인했습니다. 올바른지도를 사용하는 방법은 없나요?

+0

"선택이 깨지지 않았습니다." NHibernate는 문서화 된대로 동작합니다. –

답변

2

NHibernate의 '특성'입니다.
설명하는 동작을 '다형성 쿼리'라고합니다.

MyChildClassMyBaseClass이므로 MyChildClass 인스턴스도 검색됩니다.

이 동작을 피하려면 this topic의 답변을 살펴보십시오. (나는 결코 다형성 쿼리 능력을 '비활성화'했습니다).

+0

그것은 아름답게 작동했습니다. 방금 Polymorphism.Explicit() 내 자식 클래스 매핑을 추가하고 제대로 작동합니다. 감사! – Jason

관련 문제