1

我是.NET MVC的新手。然而,我被困在這個「問題」看起來很常見,我找不到任何教程或stackoverflow線程,解釋如何正確地做到這一點。具有相同類型屬性的NHibernate映射類

我有一個類,MyClass的具有相同類型的兩個屬性

public class MyClass : IEquatable<MyClass> 
{ 
    public virtual MyClass LeftChild { get; set; } 
    public virtual MyClass RightChild { get; set; } 
    ... 
} 

現在我有與NHibernate映射問題。起初我嘗試了一對一的映射。我創建了新的實例,不要設置Childs,持久化它(讓我說Id = 1),並將此實例傳遞給View,我期望RightChild將爲NULL,並且LeftChild將爲NULL。但在debbug模式中,我可以看到,RightChild被設置爲MyClass,Id = 1(就像MyClass實例將它自己設置爲這個屬性一樣),與LeftChild相同。

映射MyClass.hbm.xml

...  
<one-to-one name="LeftChild" class="MyClass"/> 
<one-to-one name="RightChild" class="MyClass"/> 
... 

它是一個對一個或我應該用別的東西做是正確的方法呢?

回答

1

引用,我們的表包含外鍵,幾乎總是最好映射到many-to-one

簡單地認爲它作爲一個標準的引用而其他實例(國家貨幣)......這是偶然相同類型的。

<many-to-one name="LeftChild" column="LeftChild_ID" class="MyClass"/> 
<many-to-one name="RightChild" column="RightChild_ID" class="MyClass"/> 

我看到的唯一挑戰,是要確保服務器部分(C#代碼,應用程序)將正確設置這些值。在這種持久信息中沒有雙向映射。每個兄弟姐妹都需要自己的信息,誰是正確的,誰離開了。

我的意思是,比較類似的映射:親子(也是同一類型)。在這種情況下,我們會讓孩子參考父母,父母有孩子的集合。

但這裏不一樣..我們再次映射關係的一側。

一個one-to-one不適合在這裏,因爲它需要兩個表,用(幾乎)相同數量的行,共享相同之列的關鍵......我喜歡用它,但對於那種附加信息...看到:

相關問題