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

Sco*_*ock 5 nhibernate list fluent-nhibernate

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

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

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

        References(x => x.Parent)
            .Column("PARENT_ID")
            .Not.Nullable()
            .Fetch.Join()
            .Not.LazyLoad()
            .Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

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

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

Die*_*hon 4

不支持双向索引集合(即列表和字典)。

由于它们需要避免插入 null 然后更新(请参阅 6.4.一对多关联中的注释),因此解决方法是使用 bag 而不是列表,并在多方创建常规索引属性。

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