NHibernate - 如何使用hbm文件映射从数据库中获取条件数据

时间:2010-07-15 08:15:52

标签: nhibernate fluent-nhibernate nhibernate-mapping

目前我在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属性 属性。

现在,如何通过多对一元素或其他方式实现预期效果?

先谢谢。

2 个答案:

答案 0 :(得分:1)

您应该查看<any>映射http://nhibernate.info/doc/nh/en/index.html#mapping-types-anymapping

这是NHibernate提供的最接近你想做的事情。

答案 1 :(得分:0)

我可以想到两种方法来解决这个问题。

  1. 不要在模型中包含ContactParent,使用单独的方法从ParentType和ParentId中检索它。

  2. 将所有三种父类型映射为私有成员,并在公共属性中返回非空类型。

  3. 选项1将是我的第一选择。