2011-01-10 80 views
2

這是我第一次使用NHibernate,並且我正在編寫映射和重構我的應用程序中的對象,使它們映射得更乾淨。NHibernate:可爲空的一對一關聯..?

我有一個情況看起來有點像這樣:

class A 
{ 
    // Properties of A 
    //.. 

    // References an instance of B (but can be null) 
    public B BInstance { get; set; } 
} 

class B 
{ 
    // Properties relevant to a particular instance of A 
} 

現在,這似乎是一個-to-one關聯到我,但我能找到的NHibernate的文件中沒有提及是否一個可爲空的一對一關聯實際上是可能的。

理想情況下,我的數據庫中的「B表」會有一個「A_ID」列。 存在具有該A_ID的行將表明A的關聯實例處於非空關聯。如果沒有包含該A_ID的行,則表示爲空關聯。

我認爲映射這個的唯一方法是映射A集合(應用程序限制爲1或0個元素),但我想知道是否有更明顯的解決方案,我錯過了。

在此先感謝您的幫助。

澄清:我使用的是香草NHibernate,而不是流利。

回答

1

最後我改變了模型,使它更貼近我試圖實現的數據庫模式。

我通過在對象模型中進行一對一關聯來實現這一點。 (即B類也舉行了對其相關A類的參考)。

這允許直接使用<一對一constrained =「true」/ >關聯,它是可以爲空的。

2

您應該能夠在映射中指定References(x => x.BInstance).Nullable()(假設您使用的是Fluent nHibernate)。

+1

可憐的假設:)(這是香草NHibernate) – Nick 2011-01-10 03:13:29

+0

@Nick:你應該在你的問題中澄清這個信息。 – VoodooChild 2011-01-10 03:15:16

0
中的映射,你應該寫

<many-to-one class="B" name="BInstance" column="a_ID" not-null="false"/> 

,並在課堂上把PROPERT 「B」 型的BInstance。 not-null =「false」是默認值,我寫的只是爲了強制B可以根據您的要求爲空。

相關問題