c# – NHibernate一对一映射
我是NHibernate的新手,所以到目前为止,我已经限制了映射等等,而且我刚刚打了一个需要一些帮助的场景.
我有2个表: 评测 我有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对于一对一的映射
here有很好的解释.
在你的情况下,映射应该是这样的: 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 mapping – one-to-one (or one-to-zero). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |