NHibernate的一个一对一映射 [英] NHibernate One-To-One Mapping

查看:139
本文介绍了NHibernate的一个一对一映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的NHibernate所以迄今有接触仅限于映射等,我刚刚打了一个情景,我需要一些帮助。

I'm new to NHibernate so have had limited exposure to mappings etc so far, and I've just hit a scenario which I need some help with.

我有2表:

评测
TaggedReviews

Reviews TaggedReviews

我有2类,像这样(我已经排除简洁非重要属性):

I have 2 classes that look like this (I've excluded non-important properties for brevity):

public virtual int ReviewId { get; set; }
public virtual TaggedReview TaggedReview { get; set; }
public virtual string Title { get; set; }
public virtual string Descrip { get; set; }

TaggedReview

public virtual int ReviewId { get; set; }
public virtual Review Review { get; set; }
public virtual string TaggedReviewDescrip { get; set; }

我的NHibernate的这些表/类XML映射文件目前如下(编辑为简洁起见):

My NHibernate XML mapping files for these tables/classes are currently as follows (edited for brevity):

<class xmlns="urn:nhibernate-mapping-2.2" name="Review" table="Reviews">
    <id name="ReviewId" unsaved-value="0">
        <column name="ReviewId"></column>
        <generator class="native" />
    </id>

    <property name="Title" not-null="true" />
    <property name="Descrip" not-null="true" />
    <one-to-one name="TaggedReview" class="TaggedReview" /> <!-- This is probably very wrong?! -->
</class>

TaggedReview.hbm.xml

<class xmlns="urn:nhibernate-mapping-2.2" name="TaggedReview" table="TaggedReviews">
    <id name="ReviewId">
        <column name="ReviewId"></column>
        <generator class="native"/>
    </id>
    <one-to-one name="Review" class="Review" /> <!-- This is probably very wrong?! -->
    <property name="TaggedReviewDescrip" not-null="true" />
</class>

属性ReviewId'是的'评论'表的PK。这是一个FK在'TaggedReviews'表。

The property 'ReviewId' is the PK for the 'Reviews' table. It's a FK in the 'TaggedReviews' table.

有始终为1的记录/行的TaggedReviews表在评测表中的每一记录/行 - 无多,不会少。

There is ALWAYS 1 record/row in the TaggedReviews table for every record/row in the Reviews table - no more, no less.

我也不能确定了TaggedReview类作为表没有PK,只是一个FK的评测表(ReviewId),但它看起来像映射文件需要有一个id元素,所以不知道这个不是!

I was also unsure about the 'TaggedReview' class as that table has NO PK, just a FK for the Reviews table (ReviewId), but it looked like the mapping file needed an id element in there, so wasn't sure about this either!

任何人都可以请告知如何最好地配置这种映射?

Can anyone please advise how to best configure this mapping?

推荐答案

Ayende有一个一对一的映射一个很好的解释<一个href=\"http://ayende.com/Blog/archive/2009/04/19/nhibernate-mapping-ltone-to-onegt.aspx\">here.

Ayende has a good explanation for one-to-one mappings here.

在你的情况应该映射可能是这样的:

In your case the mappings should probably look like this:

Review.hbm.xml

<class xmlns="urn:nhibernate-mapping-2.2" name="Review" table="Reviews">
    <id name="ReviewId" unsaved-value="0">
        <column name="ReviewId"></column>
        <generator class="native" />
    </id>

    <property name="Title" not-null="true" />
    <property name="Descrip" not-null="true" />
    <one-to-one name="TaggedReview"
                      constrained="true"
                      foreign-key="none" 
                      class="TaggedReview" /> 
<!-- foreign-key="none", to prevent circular reference at insert -->
</class>

TaggedReview.hbm.xml

您将最有可能需要在表的主键,因为你不能使用相同的列键和外键。

You will most likely need a primary key in the table, because you can't use the same column for the key and the foreign key.

<class xmlns="urn:nhibernate-mapping-2.2" name="TaggedReview" table="TaggedReviews">
    <id name="SomeOtherId">
        <column name="SomeOtherId"></column>
        <generator class="native"/>
    </id>
    <many-to-one name="Review" 
                 unique="true"
                 class="Review"> <!-- Use many-to-one for a foreign key -->
      <column name="ReviewId" />
    </many-to-one>
    <property name="TaggedReviewDescrip" not-null="true" />
</class>

如果您不能或不想改变分贝,你可以看看 NHibernate的映射 - 一对一(或一至零)

If you cannot or do not want to change the db, you can take a look at NHibernate mapping - one-to-one (or one-to-zero).

这篇关于NHibernate的一个一对一映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆