У меня есть класс A:
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;}
}
И Класс B:
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 в классе A работали нормально, потому что сначала было только свойство ListB, а не B, когда мне нужно было отобразить B, я попробовал это:
References(classA => classA.B,"IDClassB");
Тест сопоставления не пройден, поскольку B не был сохранен, поэтому я сделал это:
References(classA => classA.B,"IDClassB").Cascade.SaveUpdate();
На этот раз B был сохранен, но при сохранении B класс A был вставлен два раза, A.B и B.A.
Как я могу решить эту проблему? Почему это работает для свойства ListB, а не для свойства B? Спасибо