目前我在hbm文件中使用多对一元素从数据库中获取数据对象,如下所示....
<property name="ContactId" length="4" />
<many-to-one
name="DefaultContact"
column="ContactId"
class="Models.Contact"
update="false"
insert="false"/>
此代码正确获取数据,但现在我需要有条件地获取数据,就像我在hbm文件中具有以下属性和mant-to-one元素一样.....
<property name="ParentId" length="4" />
<property name="ParentType" length="4" />
<many-to-one
name="ContactParent"
column="???????? ParentId which could be CustomerId or ProspectId or LeadId according to Parent Type ????????"
class="???????? Models.Customer or Models.Prospect or Models.Lead - according to Parent Type ????????"
update="false"
insert="false"/>
我必须根据“Parent Type”属性中的值获取数据,这意味着我需要根据“Parent Type”动态设置“many-to-one”元素的class属性 属性。
现在,如何通过多对一元素或其他方式实现预期效果?
先谢谢。
答案 0 :(得分:1)
您应该查看<any>
映射http://nhibernate.info/doc/nh/en/index.html#mapping-types-anymapping
这是NHibernate提供的最接近你想做的事情。
答案 1 :(得分:0)
我可以想到两种方法来解决这个问题。
不要在模型中包含ContactParent,使用单独的方法从ParentType和ParentId中检索它。
将所有三种父类型映射为私有成员,并在公共属性中返回非空类型。
选项1将是我的第一选择。