2009-12-09 78 views
0

關係我的理解是正確的,那下面的類和表的設計是不可能的NHibernate:NHibernate的一個一對多沒有雙向關聯

public class Parent 
{ 
    public virtual Guid Id { get; set; } 
    public virtual ISet<Child> Children { get; set; } 
    ... 
} 

public class Child 
{ 
    public virtual Guid Id { get; set; } 
    ... 
} 

table Parent { Id, ... } 
table Child { Id, ParentId (not null), ... } 

所以注意以下幾點:

  • 一父母與子女之間的一對多關聯
  • 使用ISet
  • 沒有從兒童返回父母的雙向關聯
  • 孩子的的ParentId列不爲空

回答

1

我的膝蓋混亂反應是說它被支持,但我認爲你是對的。您的選項是 - Child表中的雙向關係或可爲null的ParentId列。

這裏有一個有趣的線程在那裏Ayende進入它的bug跟蹤系統對NH http://nhjira.koah.net/browse/NH-1050 (這是NH的以前的版本,但我認爲答案是一樣的)

UPDATE 11年5月7日

看起來像Nhibernate JIRA(即沒有域名)奇怪的事情。該鏈接目前可在https://nhibernate.jira.com/browse/NH-1050找到。但是,在NHibernate 3出來野外,我還沒有檢查,看看這個問題是否仍然是一個問題。

+0

上面的鏈接(Ayende文章)似乎已被破壞。 – CyberMonk 2011-05-07 18:09:53

+0

爲你修復它 – 2011-05-08 04:59:50

0

您所描述的情況是非常多的意圖,並通過NHibernate的支持。

+0

我怎樣才能做到這一點 - 根據文檔: 「如果協會列被聲明爲NOT NULL,NHibernate的可能導致違反約束時,它會創建或更新關聯爲了防止這個問題,你必須使用與許多有價值的結尾(集合或包)標記爲inverse =「true」的雙向關聯。「 – cbp 2009-12-09 02:33:00

+0

因此,請嘗試在父代的子集合映射中使用''。 – yfeldblum 2009-12-09 04:28:38

+0

但是我的一個要求是我不想要雙向關聯,因爲它會讓模型更加混亂。 – cbp 2009-12-09 07:47:51