2010-04-15 74 views
5

去年夏天,我問了一個關於how to add new object to an IList mapped as a one-to-many with NHibernate的問題。答案之一,讓我這一段的documentation在NHibernate中與索引集合的雙向一對多關聯

請注意,NHibernate的不支持雙向one-to-many關聯與索引的集合(list,map或者array)作爲「多」端,你必須使用一套或包映射。

雖然我敢肯定我明白這一段說的話,我不知道爲什麼如何解決此限制。由於我現在再次,似乎需要「與索引集合雙向one-to-many關聯」模型的工作,我想時間是正確的後續問題:

  1. 爲什麼NHibernate的對關聯有這個限制嗎?我覺得NHibernate背後的人很聰明,所以我認爲這是一個很好的理由。

  2. 這個缺點的常見解決方法是什麼?使這個集合成爲一個沒有索引的包,並將一個明確的Position屬性添加到子類中?有更好的解決方案

回答

5

這被問到4個月前,所以我不知道你是否仍然有興趣:-)

概念理由不支持雙向索引協會很簡單:指數纔有意義在一個方向。

例如,考慮一個Invoice類,其類型爲IList<Line>Lines屬性。

設置line.Invoice = anInvoice是沒有意義的,因爲無法確定列表索引應該是什麼。

記住NHibernate的「看」是兩個不同的關係,雙向關係(因此需要inverse="true"就在身邊不負責維護它的)

的解決方法是,你提出什麼:位置/索引/ etc屬性在子類中。