0

好吧,這一切似乎很簡單,但我找不到我的問題的答案。請幫我把這個簡單流暢的nhibernate映射到生活

比方說,我有2分表表A和表B,可容納一個引用到3號的表:

TableA  TableB  TableC 
ID   ID   ID 
TableC_ID TableC_ID  RandomDataC 
RandomDataA RandomDataB 

每個由以下類表示:

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;} 
    ... 
} 

正如你所看到的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); 
    } 
} 

但映射不正確。我試過ClassCMap有一個ReferencesAny但沒有成功。

請幫助...

回答

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