4

我有两个实体,FooBar像这样:NHibernate的:(一或零)到(一个或零)映射

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; } 
} 

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

我想我的表类似于此:

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 
); 

...和NHibernate的能够创建它们之间的关系。

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

+0

@JBNizet,你认为downvoting之前阅读我的问题吗?这不是我所要求的。 –

+0

您在问如何创建一个由外键映射的双向OneToOne关联,这是链接文档解释的内容。 –

+0

@JBNizet,具体而言,双方关系松散地受到限制。这在文档中没有涉及。 –

回答

6

所以@JBNizet用他的讽刺和讽刺的方式指出,就Hibernate和NHibernate而言,Zero-or-One到Zero-or-One关系被认为是可以为空的双向One-One关系;因此,按照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> 

(......我想与编辑澄清的欢迎。)

+2

感谢您解决这个问题。 +1问题和答案 – Rippo