【问题标题】:Bidirectional one-to-many associations with indexed collections in NHibernateNHibernate 中与索引集合的双向一对多关联
【发布时间】:2010-04-15 08:29:32
【问题描述】:

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

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

虽然我很确定我理解什么这段话,但我不知道为什么如何解决这个限制。由于我现在再次使用一个似乎需要“与索引集合进行双向一对多关联”的模型,因此我认为是时候提出后续问题了:

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

  2. 针对此缺点的常见解决方法是什么?使集合成为非索引包并向子类添加显式 Position 属性?有更好的解决方案吗?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    这是 4 个月前问的,所以我不知道你是否仍然感兴趣 :-)

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

    例如,考虑具有Lines 类型为IList<Line> 的属性的Invoice 类。

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

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

    解决方法正是您建议的:子类中的 Position/Index/etc 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多