【问题标题】:NHibernate filter on property from many-to-oneNHibernate 对属性进行多对一过滤
【发布时间】:2012-09-05 15:31:05
【问题描述】:

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

<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,但我认为这并不重要。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • NHibernate 生成的查询根本不包括父查询。这不可能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多