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