我有一个树结构模型(使用复合模式)。
它的类图是这样的:
数据库图:
和树样本:
当我想保留其深度大于一的 CombatElement 树时,问题就出现了,当我尝试保留此类对象时,NHibernate 仅保存第一级的对象并忽略连接到第二级对象的对象,因此:
如果我创建这棵树:
CombatElement fe = new Formation() { Name = "Alpha Company" };
fe.Add(new Soldier()
{
Name = "Joe",
Rank = 1
});
fe.Add(new Soldier()
{
Name = "Jack",
Rank = 2
});
CombatElement platoon =
new Formation();
platoon.Name = "1st Platoon";
fe.Add(platoon);
platoon.Add(
new Soldier()
{
Name = "Adam",
Rank = 2
});
platoon.Add(
new Soldier()
{
Name = "Arthur",
Rank = 3
});
只有“Joe”、“1st Platoon”和“Jack”会被保存到数据库中,而“Arthur”和“Adam”作为 1st Platoon 的子元素将被忽略,不会被保存!!
这是映射类:
public class CombatElementMap:ClassMap<CombatElement>
{
public CombatElementMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Name).Not.Nullable().Length(100);
}
}
////////////////////////
public class FormationMap:ClassMap<Formation>
{
public FormationMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
HasMany(x => x.Elements).Cascade.AllDeleteOrphan();
}
}
////////////////////////
public class SoldierMap:ClassMap<Soldier>
{
public SoldierMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Rank);
}
}
我已经级联了 Formation 对象,但问题仍然存在。为什么会这样?它只是让我感到困惑!