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