2009-12-21 122 views
0

我有一個A類:Nhibernate:在相同的2個實體之間映射兩個不同的屬性

public class ClassA 
{ 
     public int ID {get; private set;} 
     public string Code {get; private set;} 
     public ClassB B {get; private set;} 
     public IList<ClassB> ListB {get; private set;} 

} 

和一個ClassB:

public class ClassB 
{ 
     public int ID {get; private set;} 
     public string Code {get; private set;} 
     public ClassA A {get; private set;} 
     //some other attributes... 
} 

和映射:

public ClassAMap() 
{ 
    Table("ClassA"); 

    Id(classA => classA .ID, "ID").GeneratedBy.Identity(); 
    Map(classA => classA.Code, "Code").Unique().Not.Nullable(); 
    //HERE IS THE PROBLEM: -------- 
    References(classA => classA.B,"IDClassB").Cascade.SaveUpdate(); 
    //----- 
    HasMany(classA => classA.ListB).Table("ClassB").KeyColumn("IDClassA").AsBag().Not.LazyLoad().Inverse().Cascade.AllDeleteOrphan(); 
} 

ClassB映射:

public ClassBMap() 
{ 
    Table("ClassB"); 
    Id(classB => classB.ID).GeneratedBy.Identity(); 
    References(classB => classB.A, "IDClassA").ForeignKey("ID").Cascade.SaveUpdate(); 

} 

ListB的映射在classA工作正常,因爲起初只有ListB屬性而不是B,當我不得不映射B我試過這個:

References(classA => classA.B,"IDClassB"); 

映射測試失敗,因爲B沒有保存,所以我這樣做:

References(classA => classA.B,"IDClassB").Cascade.SaveUpdate(); 

此時B已保存,但通過保存B,classA被插入兩次,由AB和BA

我該如何解決這個問題?爲什麼它適用於ListB屬性而不適用於B屬性?謝謝

+0

行,我需要有另一個屬性,在CLASSB布爾值,指示如果從一個CLASSA B或一個數組listB元件被引用。 在CLASSB: 公共BOOL ISB {獲得;私人集;} 現在我不得不NHibernate的說,當我得到B中CLASSA我必須去CLASSB表並IDClassA和SB =真 – 2009-12-21 12:50:05

+0

Myabe得到它我就會把B,爲數組listB元素太多,但與IsB布爾值設置爲true,解決了這個問題... – 2009-12-21 13:30:11

回答

0

我解決了這個創建於CLASSA B和數組listB列表,包含B和數組listB元素,屬性現在「意見」在新的列表。爲了從前面的B屬性中區分出前面的listB元素,我在classB中添加了一個布爾值,如果爲true,那麼B爲false就是listB元素。

相關問題