我在一个实体中有自我指涉关系,因为我的生活无法理解这一点。
我有一个类型,“Project”,它有许多属性,对于这种情况无关紧要,但有趣的部分如下:
ca.ManyToOne(x => x.Parent, map =>
{
map.Class(typeof(Project));
map.Column("ParentProjectID");
});
ca.List(x => x.Children, map =>
{
map.Key(k => k.Column("ParentProjectID"));
map.Index(i =>
{
i.Column(x =>
{
x.Default(1);
x.Name("Position");
});
});
map.Inverse(true);
map.Lazy(CollectionLazy.NoLazy);
map.Cascade(Cascade.All | Cascade.DeleteOrphans);
},
e => e.OneToMany(x => x.Class(typeof(Project))));
我遇到的问题是,当我创建我的项目和子项目时,“位置”字段未在数据库中设置,它只是保留为“1”或“空”,具体取决于我设置的选项。对于类型列表,如果存在多个索引字段,则需要填充索引字段,否则您将获得类型为ListDictionaryInternal
的异常,并为集合名称提供“收集的空索引列”消息。
项目由导入程序在数据库中创建,索引应根据映射/ NH配置自动生成。
有没有人在这方面有经验?我只是想让它自动填充索引,否则只列出子项不起作用。
答案 0 :(得分:0)
这实际上是NH 3.2.2000中的一个主要错误,但GC是NH 3.2.4000,似乎(主要)解决了它。我们没有时间制作一个测试项目作为示例提交以显示错误。发出了不正确的SQL语句,因此答案是在某些语句之间执行Session.Flush()
,特别是在涉及自引用列表时。