C# 命名查询与继承

C# 命名查询与继承,c#,nhibernate,inheritance,named-query,C#,Nhibernate,Inheritance,Named Query,我在NHibernate上运行命名查询时遇到一些问题。我设置为返回值的类是Organization——不是抽象类,我还有第二个类(从这个类继承而来),名为FullOrganization。我有一个每个具体类模式的表,其他一切都正常工作,但我在运行命名查询时一直遇到异常(顺便说一句,该查询没有提供任何详细信息) 映射接近于以下内容: <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="XXX" assembl

我在NHibernate上运行命名查询时遇到一些问题。我设置为返回值的类是Organization——不是抽象类,我还有第二个类(从这个类继承而来),名为FullOrganization。我有一个每个具体类模式的表,其他一切都正常工作,但我在运行命名查询时一直遇到异常(顺便说一句,该查询没有提供任何详细信息)

映射接近于以下内容:

<hibernate-mapping 
xmlns="urn:nhibernate-mapping-2.2" 
namespace="XXX" 
assembly="XXX" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:nhibernate-mapping-2.2 ..\nhibernate-mapping.xsd" auto-import="false">
<class name="Organization" table="Organizations" lazy="false">
    <id name="Identity" column="Id">
        <generator class="identity"/>
    </id>

    <property name="Name" column="Name" />
    <many-to-one name="OrganizationType" column="OrganizationTypeId"/>
...
            <joined-subclass name="FullOrganization" table="FullOrganizations" lazy="false">
        <key column="OrganizationId"/>
                    ...
            </joined-subclass>
</class>

...
...
命名查询类似于:

<sql-query name="OrganizationSearch" read-only="true" cacheable="false">
<return class="Organization" />
<![CDATA[
  SELECT *
  FROM Organizations o
  INNER JOIN OrganizationTypes ot ON o.OrganizationTypeId = ot.Id 
  LEFT JOIN FullOrganizations fo ON o.Id = fo.OrganizationId
  WHERE 
    // Several Filters Here
]]>


我应该如何映射查询结果?请考虑返回的对象可能是Organization或FullOrganization的实例。

如果我理解正确,您有两种搜索方法吗?i、 e

SearchOrganizations
SearchFullOrganizations

如果答案是肯定的,那么我将删除

在代码中,您可以使用
别名作为结果变压器

所以有一种方法

return Session
    .GetNamedQuery("OrganizationSearch")
    .SetString("Param1", param1)
    .SetResultTransformer(new AliasToBeanResultTransformer(typeof(Organization )))
    .List<Organization >();
返回会话
.GetNamedQuery(“OrganizationSearch”)
.SetString(“参数1”,参数1)
.SetResultTransformer(新别名为BeanResultTransformer(组织类型)))
.List();
而且

return Session
    .GetNamedQuery("OrganizationSearch")
    .SetString("Param1", param1)
    .SetResultTransformer(new AliasToBeanResultTransformer(typeof(FullOrganization )))
    .List<FullOrganization >();
返回会话
.GetNamedQuery(“OrganizationSearch”)
.SetString(“参数1”,参数1)
.SetResultTransformer(新别名为BeanResultTransformer(typeof(FullOrganization)))
.List();

如果您有一个方法,那么您可以设置一个开关来应用所需的
SetResultTransformer

,实际上我希望我可以使用一个搜索方法,这就是为什么我在sql查询中执行左连接,而WHERE部分的条件都是相同的或(fo.不是NULL,fo.像:pattern)。但是现在您提到了它,我可能错误地认为NHibernate应该创建Organization或FullOrganization实例,这取决于FullOrganization字段是否不为NULL……我没有遵循这个确切的实现,而是对结果集使用了DTO。然而,我将答案标记为已接受,因为它将引导我找到解决方案。谢谢