2011-01-10 47 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可以根据您的要求为空。

相关问题