簡體   English   中英

NHibernate一對一映射

[英]NHibernate One-To-One Mapping

我是NHibernate的新手所以到目前為止對映射等的接觸有限,而且我剛剛遇到了一個我需要一些幫助的場景。

我有2張桌子:

評論TaggedReviews

我有2個看起來像這樣的類(為簡潔起見,我排除了非重要屬性):

評論

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映射文件目前如下(為簡潔起見編輯):

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" 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。 它是'TaggedReviews'表中的FK。

對於評論表中的每個記錄/行,TaggedReviews表中總共有1條記錄/行 - 不多也不少。

我也不確定'TaggedReview'類,因為該表沒有PK,只有一個FK用於評論表(ReviewId),但看起來映射文件需要一個id元素,所以不確定這個!

任何人都可以建議如何最好地配置此映射?

Ayende對這里的一對一映射有一個很好的解釋。

在您的情況下,映射應該看起來像這樣:

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

您很可能需要表中的主鍵,因為您不能對鍵和外鍵使用相同的列。

<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映射 - 一對一(或一對零)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM