NHibernate :(一或零)到(一或零)映射

Jer*_*acs 4 nhibernate hibernate nhibernate-mapping hibernate-mapping

我有两个实体,FooBar像这样:

public class Foo
{
    public virtual Guid FooID { get; set; }
    public virtual Bar MyBar { get; set; }
}

public class Bar
{
    public virtual Guid BarID { get; set; }
    public virtual Foo MyFoo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这两个实体可以彼此独立存在,但有时它们是相关的,当发生这种情况时,我想确保它们在持久层中链接.

我希望我的表格类似于:

create table Foo (
    FooID int primary key,
    -- other stuff
);

create table Bar (
    BarID int primary key,
    FooID int null references Foo(FooID) on delete no action on update no action
);
Run Code Online (Sandbox Code Playgroud)

......并且让NHibernate能够创建它们之间的关系.

我该如何映射(XML首选)?

Jer*_*acs 7

所以@JBNizet以他讽刺和讽刺的方式指出,就Hibernate和NHibernate而言,零或一对零或一对关系被认为是一种可以为空的双向一对一关系; 因此,根据http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#assoc-bidirectional-121,映射将如下所示:

<class name="Foo">
    <id name="FooID" column="FooID">
        <generator class="guid" />
    </id>
    <one-to-one name="MyBar" property-ref="MyFoo" />
</class>

<class name="Bar">
    <id name="BarID" column="BarID">
        <generator class="guid" />
    </id>
    <many-to-one name="MyFoo" column="FooID" unique="true" not-null="false" />
</class>
Run Code Online (Sandbox Code Playgroud)

(...我认为.欢迎进行澄清编辑.)

  • 谢谢你清理这个.问题和答案都是+1 (2认同)