Ayende有一个使用<any>
映射here的很好的例子,我将其作为我问题的一部分重新发布,因为该博客文章中的评论已经关闭。鉴于他原来的映射:
<class name="Order" table="Orders">
<id name="Id">
<generator class="native"/>
</id>
<any name="Payment" id-type="System.Int64" meta-type="System.String" cascade="all">
<meta-value value="CreditCard" class="CreditCardPayment"/>
<meta-value value="Wire" class="WirePayment"/>
<column name="PaymentType"/>
<column name="PaymentId"/>
</any>
</class>
<class name="CreditCardPayment" table="CreditCardPayments">
<id name="Id">
<generator class="native"/>
</id>
<property name="IsSuccessful"/>
<property name="Amount"/>
<property name="CardNumber"/>
</class>
<class name="WirePayment" table="WirePayments">
<id name="Id">
<generator class="native"/>
</id>
<property name="IsSuccessful"/>
<property name="Amount"/>
<property name="BankAccountNumber"/>
</class>
...我如何在CreditCardPayment和WirePayment类上映射一个名为Order的属性,这可能是该关联的“反面”,允许从这些付款的遍历回到与它们关联的订单?
这里的问题是,CreditCardPayment和WirePayment可能具有相同的ID,因为它们位于不同的表中,所以我需要一些方法告诉NHibernate考虑PaymentType。
答案 0 :(得分:2)
NHibernate不支持双向异构关联(即<any>
)。
我知道这不是你想听到的,但就是这样。