NHibernate过滤多属性的属性

时间:2012-09-04 15:20:47

标签: nhibernate nhibernate-mapping linq-to-nhibernate

我正在尝试使用NHibernate过滤器来过滤父类的属性,但我不断收到multi-part identifier "Parent.Active" could not be bound的错误。我的filter-def是:

<filter-def name="useActive" />

我的父类在映射中有这个:

<property name="Active">
    <column name="ACTIVE" not-null="true" />
</property>
<bag name="Children" table="CHILDREN" inverse="true">
    <key>
        <column name="PARENT_ID_IN_CHILD" />
    </key>
    <one-to-many class="ChildType" />
</bag>

我的子类在映射中有这个:

<many-to-one name="Parent" class="ParentTyle">
    <column name="PARENT_ID_IN_CHILD" />
</many-to-one>
<filter name="useActive" condition="Parent.Active = 1" />

如何在过滤时让NHibernate检查父列?

修改:我正在使用mySession.EnableFilter("useActive");启用过滤器。我也在使用LINQ-to-NHibernate,但我认为这不重要。

1 个答案:

答案 0 :(得分:0)

您收到的错误来自SQL Server,无法在表“Parent”上找到“Active”列。 请记住,当您定义过滤器时,您在条件中放入的字符串将简单地附加在select 的where条件中,而不是。如果要对该字段进行过滤,则必须首先确定用于SQL查询的别名nHibernate,而不是使用该别名而不是“父”。它可以像“mytable_0”之类的东西。