我正在使用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在插入过程中写入索引列?
答案 0 :(得分:4)
双向索引集合(即列表和词典)为not supported。
由于必需以避免插入null然后更新(请参阅6.4。One-To-Many Associations中的注释),解决方法是使用包而不是列表并创建常规多方面的索引属性。
然后,您可以包装集合操作以处理双方的引用和索引。
答案 1 :(得分:0)
我可能不完全理解您的问题,但请确保在将子项添加到父项的子集合时,在子模型(x.Parent
)上设置父实例。