2012-02-13 2 views
0

나는이 클래스를 기반으로하지만 결과를 계산하는 방법이 다른 두 개의 클래스와 추상적이지 않은 기본 클래스를가집니다. baseclass는 또한 시스템의 많은 다른 장소에서 공유되는 추상 클래스를 상속하므로 실제로 변경할 수는 없습니다.어떻게 상속을 서브 클래스로 매핑 할 수 있습니까?

저는이 세 가지가 모두 상속받은 기본 클래스를 추출하고 하위 클래스와의 일반 매핑을 사용하지만이 시나리오를 매핑하는 hbm 파일을 만들 수 있는지 알고 싶습니다. NHibernate에 documentation에서

class BaseClass : CalculationBaseClass 
{ 
    public virtual int Calculate() 
    { 
    ... 
    } 
} 

class SpecializedClass : BaseClass 
{ 
    public override int Calculate() 
    { 
     ... 
    } 
} 

class HistoricClass : BaseClass 
{ 
    public override int Calculate() 
    { 
     ... 
    } 
} 
+0

달성하려는 목표를 100 % 확신하지 못합니다. 원하는 테이블을 지정할 수 있습니까? 모양이 보입니까? –

답변

0

:

자 NHibernate는 세 가지 기본적인 상속 매핑 전략을 지원합니다.

  • 서브 클래스 당 테이블

  • 테이블 구체적인 클래스 당 클래스 계층 당

    • 테이블

  • 당신은 무엇을 현재 테이블을 기반으로 전략 중 하나를 선택할 것 구조가 아니면 레거시 스키마가없는 경우 가장 많이 사용하는 스키마를 선택할 수 있습니다. 개체 모델에 대해 riate합니다 (예를 들어 매핑 된 속성을 기반으로 함). 귀하의 경우 '테이블 당 클래스 계층 구조'를 사용하면 다음과 같이 매핑됩니다.

    <class name="CalculationBaseClass" table="MyTable"> 
        <id name="Id" type="Int64" column="ID"> 
         <generator class="native"/> 
        </id> 
        <discriminator column="TYPE" type="String"/> 
    
        <subclass name="BaseClass" discriminator-value="BASE"> 
         ... 
        </subclass> 
        <subclass name="SpecializedClass" discriminator-value="SPECIALIZED"> 
         ... 
        </subclass> 
        <subclass name="HistoricClass " discriminator-value="HISTORIC"> 
         ... 
        </subclass> 
    </class> 
    
    관련 문제