0

글쎄, 너무 단순 해 보이지만 내 문제에 대한 답을 찾을 수 없습니다.제발이 단순한 유창한 nhibernate 매핑을 생활에 가져 오도록 도와주세요.

의 내가 제 3 테이블에 하나의 참조를 저장할 수있는 두 테이블 TableA의 및 TableB의 있다고 가정 해 봅시다 : 당신이 볼 수 있듯이

public Class ClassA{ 
    public virtual int Id{get;set;} 
    public virtual ClassC ObjAC{get;set;} 
    ... 
} 

public Class ClassB{ 
    public virtual int Id{get;set;} 
    public virtual ClassC ObjBC{get;set;} 
    ... 
} 

public Class ClassC{ 
    public virtual int Id{get;set;} 
    ... 
} 

:

TableA  TableB  TableC 
ID   ID   ID 
TableC_ID TableC_ID  RandomDataC 
RandomDataA RandomDataB 

은 다음과 같은 클래스로 표현됩니다 ClassA와 ClassB는 ClassC라는 단일 속성을 보유합니다.

public Class ClassAMap : ClassMap<ClassA>{ 
    public ClassAMap(){ 
     Id(x => x.Id); 
     HasOne(x => x.ObjAC).Cascade.All(); 
     ... 
    } 
} 

public Class ClassBMap : ClassMap<ClassB>{ 
    public ClassBMap(){ 
     Id(x => x.Id); 
     HasOne(x => x.ObjBC).Cascade.All(); 
     ... 
    } 
} 

public Class ClassCMap : ClassMap<ClassC>{ 
    public ClassCMap(){ 
     Id(x => x.Id); 
    } 
} 

나는 다음과 같은 매핑을 시도했습니다

(다른 사람의 사이에 ...)하지만 매핑이 잘못되었습니다. 나는 ReferencesAny를 가지고 있지만 성공하지 못한 ClassCMap을 시도했다.

도와주세요 ...

답변

2

이 시도 :

public Class ClassAMap : ClassMap<ClassA>{ 
    public ClassAMap(){ 
     Id(x => x.Id); 
     References(x => x.ObjAC, "TableC_ID").Cascade.All(); 
     ... 
    } 
} 

public Class ClassBMap : ClassMap<ClassB>{ 
    public ClassBMap(){ 
     Id(x => x.Id); 
     References(x => x.ObjBC, "TableC_ID").Cascade.All(); 
     ... 
    } 
} 

public Class ClassCMap : ClassMap<ClassC>{ 
    public ClassCMap(){ 
     Id(x => x.Id); 
    } 
} 

당신은 또한 올바른 테이블 이름을 유추되고 있는지 확인 할 수 있습니다. 문제는 HasOne이 매핑하려는 테이블의 기본 키를 기반으로 엔티티에 매핑된다는 것입니다.

+0

감사합니다. – karlipoppins

1

이것은 HasOne을 사용할 때 테이블이 다른 테이블과 동일한 기본 키를 공유 함을 의미합니다. 당신의 경우에 이것은 사실이 아닙니다. 클래스 A, B 및 C는 각각 고유 한 ID를가집니다. 자세한 내용이 설명은 다음 문서 체크 아웃 :

http://jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/

+0

+1 언젠가 전에 링크를 보았지만 잃어 버렸습니다. 감사 – karlipoppins

0

당신은 '다시 아마 References 대신 HasOne을 사용할 필요. HasOne은 독특한 유스 케이스를 가지고 있습니다. HasOneReferences으로 바꿉니다. 믿을 수가 없어. 캐스케이드.()도 필요합니다.

여기서 HasOne의 사용법을 확인할 수 있습니다 : http://wiki.fluentnhibernate.org/Fluent_mapping.

관련 문제