去年夏天,我问了一个关于how to add new object to an IList mapped as a one-to-many with NHibernate的问题。其中一个答案让我看到documentation中的这一段:
请注意,NHibernate不支持与索引集合(列表,映射或数组)的双向一对多关联作为“多”端,您必须使用集合或包映射。
虽然我非常确定我理解本段落的内容,但我不知道为什么或 如何解决此限制。由于我现在再次使用一个似乎需要“与索引集合进行双向一对多关联”的模型,我认为时间适合后续问题:
为什么NHibernate对关联有这个限制?我的印象是NHibernate背后的人非常聪明,所以我认为有一个很好的理由。
这个缺点有哪些常见的解决方法?使集合成为非索引包并向子类添加显式Position
属性?还有更好的解决方案吗?
答案 0 :(得分:5)
这是4个月前提出来的,所以我不知道你是否还有兴趣: - )
不支持双向索引关联的概念性原因很简单:索引只在一个方向上有意义。
例如,考虑一个Invoice
类,其Lines
属性类型为IList<Line>
。
设置line.Invoice = anInvoice
毫无意义,因为无法确定列表索引应该是什么。
请记住,NHibernate将“双向关系”视为两种不同的关系(因此需要inverse="true"
而不负责维护它。
解决方法正是您所建议的:子类中的位置/索引/ etc属性。