1

Property, Business, Automobile이라는 3 개의 테이블을 유틸리티라는 단일 테이블로 지정하려고합니다. 은 유창함 자 NHibernate를 사용하여, 나는 하나의 테이블에 여러 테이블을 매핑하면 Fluent NHibernate에서 외래 키 컬럼을 생성합니다

public UtilityMap() 
    { 
     // some Mappings 
     References<Automobile>(x => x.Automobile, "LeaseRefId").Cascade.None(); 
     References<Business>(x => x.Business, "LeaseRefId").Cascade.None(); 
     References<Property>(x => x.Property, "LeaseRefId").Cascade.None(); 
    } 

을 따라 유틸리티에 매핑 각 테이블에, 나는

public AutomobileMap() 
    { 
     //Some Mappings 

     HasOne<Utility>(x => x.CommonDatas) 
      .Cascade.All(); 
    } 

는 "나는 를 저장할 수있는 유틸리티 표에서 하나의 열을 갖고 싶어 다음 (자동차, 비즈니스, 부동산) 테이블 세 개 모두 참조. 유창한 Nhibernate가 참조한 테이블 각각에 대한 foreing 키 열을 생성하고 있습니다.이 문제를 피하고 싶습니다. "

이 방법이 있습니까? 감사의 말을 전 해주십시오.

답변

1

예상대로 작동하려면 Automobile, BusinessProperty 클래스의 기본 클래스가 있어야합니다. LeaseSubject이라고합시다. 아마도 도메인 모델에는 이미 이와 비슷한 것이 있습니다.

귀하의 유틸리티 클래스 대신 세의 당신은 지금이 단 하나의 속성이 있어야합니다

public virtual LeaseSubject LeaseSubject { get; set; } 

이 방법 만 쉽게 매핑을하지, 또한 코드의 유지 보수성을 추진하고 있습니다. 나중에 약간의 임대 주제가있을 경우 (예 : Yacht)? 유틸리티 클래스에 다른 Yacht 속성을 추가하는 대신 LeaseSubject에서 상속해야하며 Utility 클래스의 LeaseSubject 속성에 포함될 수 있습니다. 단순히

지금 당신은 당신의 유틸리티를 매핑 할 수 있습니다 :

매핑 자동차, 비즈니스 및 속성 클래스에 대한
public UtilityMap() 
{ 
    // Other mappings... 
    References(x => x.LeaseSubject, "LeaseRefId"); 
} 

, 당신이 중 하나를 사용하는 것이 세 가지 NHibernate에 inheritance strategies 가능 : 클래스 계층 구조 당

  • 테이블
  • 서브 클래스 당 테이블
  • 콘크리트 클래스 당 테이블

FluentNHibernate 상속 매핑의 경우 here을보십시오.

이미 별도의 테이블이 있으므로, 귀하의 사례에 대한 올바른 전략은 테이블 당 콘크리트 클래스 일 것입니다. 이 article에서 더 많은 정보를 찾을 수 있습니다.

관련 문제