NHibernate中与索引集合的双向一对多关联

时间:2010-04-15 08:29:33

标签: nhibernate

去年夏天,我问了一个关于how to add new object to an IList mapped as a one-to-many with NHibernate的问题。其中一个答案让我看到documentation中的这一段:

  

请注意,NHibernate不支持与索引集合(列表,映射或数组)的双向一对多关联作为“多”端,您必须使用集合或包映射。

虽然我非常确定我理解本段落的内容,但我不知道为什么 如何解决此限制。由于我现在再次使用一个似乎需要“与索引集合进行双向一对多关联”的模型,我认为时间适合后续问题:

  1. 为什么NHibernate对关联有这个限制?我的印象是NHibernate背后的人非常聪明,所以我认为有一个很好的理由。

  2. 这个缺点有哪些常见的解决方法?使集合成为非索引包并向子类添加显式Position属性?还有更好的解决方案吗?

1 个答案:

答案 0 :(得分:5)

这是4个月前提出来的,所以我不知道你是否还有兴趣: - )

不支持双向索引关联的概念性原因很简单:索引只在一个方向上有意义。

例如,考虑一个Invoice类,其Lines属性类型为IList<Line>

设置line.Invoice = anInvoice毫无意义,因为无法确定列表索引应该是什么。

请记住,NHibernate将“双向关系”视为两种不同的关系(因此需要inverse="true"而不负责维护它。

解决方法正是您所建议的:子类中的位置/索引/ etc属性。