NHIbernate <any>映射问题</any>

时间:2010-07-07 02:11:09

标签: c# nhibernate nhibernate-mapping

我正在将NHibernate用于电子商务网站,并且很难获得应该是一个简单的映射工作。基本上我有一个ContactDetails实体,用于保存任何类型用户的联系方式 - 买方/卖方/广告商/等。我使用“any”映射来允许单个表保存每种类型的contact_details。该ID将写入contact_details_id,并将类型(买方/卖方/广告商)写入contact_details_type字段,如下所示。

<class name="ContactDetails" table="contact_details">

<id name="ID">
  <generator class="hilo" />
</id>

<any name="Party" id-type="System.Int32" meta-type="System.String" cascade="all">
  <meta-value value="buyer" class="Buyer" />
  <meta-value value="seller" class="Seller" />
  <column name="contact_details_type" />
  <column name="contact_details_id" />
</any>

在我的买家映射中,我有一对一的联系方式,如下所示

<one-to-one name="ContactDetails" class="ContactDetails" cascade="all" />

这一切看起来很好,我能够将contactdetails保存到数据库中。我的问题是,当我尝试从数据库加载买方时,不会返回ContactDetails。生成的查询不是加入contact_details_id字段,而是加入contact_details表的ID字段。我已经尝试了所有可能的但是无论发生什么,我都无法在正确的字段(contact_details_id)上获取代码。有没有人尝试过这个,如果有的话,它是如何工作的?如果需要更多细节,请告诉我。

提前致谢,

JP

1 个答案:

答案 0 :(得分:2)

隐式多态性不支持

one-to-one

备选方案:

  • 如果您没有BuyerSeller,可以创建一个超类(您可以将其称为Party),使用隐式以外的任何策略映射层次结构,并使用常规one-to-onemany-to-one关系,而不是any(首选)
  • 请勿在{{1​​}}中映射关系,而是使用查询

(隐式多态方法的局限性在此强调:http://nhibernate.info/doc/nh/en/index.html#inheritance-limitations