如何使用非可空索引在NHibernate中创建列表集合?

时间:2011-02-18 19:57:08

标签: nhibernate list fluent-nhibernate

我正在使用FluentNHibernate映射双向一对多关系,其中排序很重要,所以我使用的是列表:

        HasMany(x => x.Children)
            .AsList(index => index.Column("CHILD_INDEX"))
            .KeyColumn("PARENT_ID")
            .Not.LazyLoad()
            .Access.CamelCaseField()
            .Cascade.AllDeleteOrphan();

另一方面,它的映射如下:

        References(x => x.Parent)
            .Column("PARENT_ID")
            .Not.Nullable()
            .Fetch.Join()
            .Not.LazyLoad()
            .Cascade.SaveUpdate();

现在在我的实际数据库中,CHILD_INDEX列不可为空。但是,当NHibernate在插入期间持久保存子元素时,它不会插入CHILD_INDEX列。然后执行UPDATE以设置CHILD_INDEX。这对我来说很奇怪,因为它在插入时肯定有索引值。

有没有办法告诉NHibernate在插入过程中写入索引列?

2 个答案:

答案 0 :(得分:4)

双向索引集合(即列表和词典)为not supported

由于必需以避免插入null然后更新(请参阅6.4。One-To-Many Associations中的注释),解决方法是使用包而不是列表并创建常规多方面的索引属性。

然后,您可以包装集合操作以处理双方的引用和索引。

答案 1 :(得分:0)

我可能不完全理解您的问题,但请确保在将子项添加到父项的子集合时,在子模型(x.Parent)上设置父实例。