NHibernate:可空的一对一关联..?

时间:2011-01-10 03:06:40

标签: c# .net 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
}

现在,这对我来说似乎是一对一的关联,但是我在NHibernate文档中找不到关于是否可以实现可以为空的一对一关联的参考。

理想情况下,我的数据库中的“B表”将具有“A_ID”列。 具有该A_ID的行的存在将指示A的关联实例处于非空关联中。如果没有具有该A_ID的行,则表示空关联。

我能想到映射这个的唯一方法是从A映射集合(应用程序限制为1或0个元素),但我想知道是否有一个更明显的解决方案,我缺少。

提前感谢您的协助。

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

4 个答案:

答案 0 :(得分:2)

您应该能够在映射中指定引用(x => x.BInstance).Nullable()(假设您使用的是Fluent nHibernate)。

答案 1 :(得分:1)

最后,我改变了模型,使其更紧密地映射到我试图实现的数据库模式。

我通过在对象模型中进行双向一对一关联来实现这一点。 (即,B班也提到了其相关的A类)。

这允许直接使用<一对一约束=“真”/>协会,可以为空。

答案 2 :(得分:0)

使用一对一元素可以实现可以为空的一对一映射。有关Ayende的详细摘要,请参阅http://ayende.com/Blog/archive/2009/04/19/nhibernate-mapping-ltone-to-onegt.aspx

答案 3 :(得分:0)

在A映射中你应该写:

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

并且在类中放置了类型为“B”的属性BInstance。 not-null =“false”是默认值,我写的只是为了强制执行B可以按你的要求为空。