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屬性?謝謝
行,我需要有另一個屬性,在CLASSB布爾值,指示如果從一個CLASSA B或一個數組listB元件被引用。 在CLASSB: 公共BOOL ISB {獲得;私人集;} 現在我不得不NHibernate的說,當我得到B中CLASSA我必須去CLASSB表並IDClassA和SB =真 – 2009-12-21 12:50:05
Myabe得到它我就會把B,爲數組listB元素太多,但與IsB布爾值設置爲true,解決了這個問題... – 2009-12-21 13:30:11