自我参考列表指数[NH 3.2]

时间:2011-08-19 15:54:42

标签: nhibernate

我在一个实体中有自我指涉关系,因为我的生活无法理解这一点。

我有一个类型,“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配置自动生成。

有没有人在这方面有经验?我只是想让它自动填充索引,否则只列出子项不起作用。

1 个答案:

答案 0 :(得分:0)

这实际上是NH 3.2.2000中的一个主要错误,但GC是NH 3.2.4000,似乎(主要)解决了它。我们没有时间制作一个测试项目作为示例提交以显示错误。发出了不正确的SQL语句,因此答案是在某些语句之间执行Session.Flush(),特别是在涉及自引用列表时。