[英]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; }
public virtual int ReviewId { get; set; }
public virtual Review Review { get; set; }
public virtual string TaggedReviewDescrip { get; set; }
我的NHibernate这些表/类的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>
<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.