1

对于以下类映射:

<class name="Person" table="Person" discriminator-value="null">
    <id name="ID" column="ID" >
        <generator class="identity"/>
    </id>
    <discriminator column="MasterId" />
    <property name="LongName" column="LONGNAME" />
    <property name="ShortName" column="SHORTNAME" />
    // other stuff here ...
    <subclass name="PersonHistory" discriminator-value="not null">
        <property name="MasterId" />
    </subclass>
</class>

当我执行:

        var query =
            from lac in session.Query<Person>()
            orderby lac.LongName
            select lac;
        return query.ToList();

我从Person表中获取所有条目,其中 MasterId 都设置为 null 而不是 null。有没有办法让 NHibernate 只获取 MasterId = null 的实体?

4

2 回答 2

1

在你的情况下使用鉴别器公式怎么样?

<discriminator formula="case when MasterId is null then 0 else 1 end" />

然后为类设置鉴别器属性值:

  • 对于人:discriminator-value="0"
  • 对于 PersonH​​istory:discriminator-value="1"
于 2012-06-06T23:10:36.360 回答
1

为了实现我想要的,我创建了基类 + 两个子类。这是配置:

  • 具有discriminator-value 的子类:

    <subclass name="People" discriminator-value="null">
    </subclass>
    <subclass name="PeopleHistory" discriminator-value="not null">
        <property name="MasterRowId" />
    </subclass>
    
  • 基类中的鉴别器:

    <discriminator column="MasterRowId" />
    
于 2012-06-14T13:22:22.103 回答