2011-08-23 9 views
1

두 테이블이 같은 키를 공유하는 상황이 있습니다. 그냥 ID라고합시다. FluentMapping을 사용하여 두 테이블을 매핑 할 때 ID를 실제로 객체에 매핑하려는 클래스의 매핑을 어떻게 수행합니까?유창한 nHibernate Id는 참조입니다

어떻게 두 번째 클래스를 매핑합니까? 두 번째 테이블에도 ID가 있지만 첫 번째 테이블의 ID에 대한 외래 키입니다. sJhonny 같은

+1

에서의 너무 멋지지를 필요로했다 'Second'는 일종의 'First'라고 말하는가? 의미는 '종업원'이 일종의 '사람'이거나, '관리자'가 종업원의 일종이라는 뜻이다. 그렇다면 상속을 사용하는 것이 좋습니다. –

답변

1

이 정말

class First 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

class Second : First 
{ 
    public virtual int Number { get; set; } 
} 

class FirstMap : ClassMap<First> 
{ 
    public FirstMap() 
    { 
     Id(f => f.Id).GeneratedBy.HiLo("100"); 

     Map(f => f.Name); 
    } 
} 

class SecondMap : SubclassMap<Second> 
{ 
    public SecondMap() 
    { 
     KeyColumn("Id"); 

     Map(s => s.Number); 
    } 
} 

을 줄 것이다 상속처럼 들리지만 시나리오도 가능하지만 추가 작업과 그 코드 나중에

class SecondMap : ClassMap<Second> 
{ 
    public SecondMap() 
    { 
     CompositeId() 
      .KeyReference(f => f.First, "Id"); 

     Map(s => s.Number); 
    } 
} 

class Second 
{ 
    public virtual First First {get; set;} 
    public virtual int Number { get; set; } 

    // required for Compositekeys 
    public override bool Equals(object obj) 
    { 
     var other = obj as Second; 
     return (other != null) && (First.Id == other.First.Id) ; 
    } 

    // required for Compositekeys 
    public override int GetHashCode() 
    { 
     return First.Id.GetHashCode(); 
    } 
} 
관련 문제