.net NHibernate Fluent和命名查询

.net NHibernate Fluent和命名查询,.net,nhibernate,.net,Nhibernate,我有一个名为Queryé的函数,我喜欢将它的结果映射到一个类上 <sql-query name="GetIndustryCodes"> <return class="IndustryCode"> <return-property name="Sector_kategorie" column="Sector_kategorie"/> <return-property name="Sector_scheme_reference

我有一个名为Queryé的函数,我喜欢将它的结果映射到一个类上

<sql-query name="GetIndustryCodes">
    <return class="IndustryCode">
      <return-property name="Sector_kategorie" column="Sector_kategorie"/>
      <return-property name="Sector_scheme_reference" column="Sector_scheme_reference"/>
      <return-property name="Group_Beschreibung" column="Group_Beschreibung"/>    
    </return>         
    <![CDATA[
       select * from 
  (
      select    
    lvl1.sprach_iso_cd,
      lvl1.kategorie Sector_kategorie,
      lvl1.scheme_reference Sector_scheme_reference,
      lvl1.Beschreibung Sector_Beschreibung, 

      lvl2.kategorie Group_kategorie,
      lvl2.scheme_reference Group_scheme_reference,
      lvl2.Beschreibung Group_Beschreibung, 

      lvl3.kategorie Industry_kategorie,
      lvl3.scheme_reference Industry_scheme_reference,
      lvl3.Beschreibung Industry_Beschreibung, 

      lvl4.kategorie Subindustry_kategorie ,
      lvl4.scheme_reference Subindustry_scheme_reference,
      lvl4.Beschreibung Subindustry_Beschreibung

      from StagingDb.Rds.GR3_S_R10916_TX  lvl1 

      left join  StagingDb.Rds.GR3_S_R10916_TX lvl2
      on  lvl2.sprach_iso_cd = lvl1.sprach_iso_cd 
      and lvl2.kategorie = 'MSCIS&PGroup'
      and lvl1.scheme_reference = substring(lvl2.scheme_reference,1,2)

      left join  StagingDb.Rds.GR3_S_R10916_TX lvl3
      on lvl3.sprach_iso_cd = lvl1.sprach_iso_cd 
      and lvl3.kategorie = 'MSCIS&PIndustry'
      and lvl2.scheme_reference = substring(lvl3.scheme_reference,1,4)

      left join  StagingDb.Rds.GR3_S_R10916_TX lvl4
      on lvl4.sprach_iso_cd = lvl1.sprach_iso_cd 
      and lvl4.kategorie = 'MSCIS&P'
      and lvl3.scheme_reference = substring(lvl4.scheme_reference,1,6)

      where lvl1.kategorie = 'MSCIS&PSector'

  ) t
  where t.sprach_iso_cd ='en'
    ]]>
  </sql-query>
现在,在启动程序时,我得到了一个例外 创建SessionFactory时使用了无效或不完整的配置。有关详细信息,请检查潜在原因集合和InnerException

InnerExceptioné“字典中不存在给定的键。”

如果我在没有返回类的情况下使用查询,那么它工作得很好,只是我得到的返回值没有映射到类中。但是这个班肯定在集合中。 如何将查询映射到类中


非常感谢

经过一些黑客攻击之后,我确信我只能将某个SP的输出映射到一个具有映射到DB的类


因此,仅仅拥有一个sp并将其映射到某个类是行不通的。该类必须具有映射,因此该类必须是域模型的类。

我没有任何到DB的类映射。下面的代码为我工作。其中Desk在Desk.hbm.xml文件中定义

public class NHibernateHelper
{
    private readonly string _connectionString;
    private ISessionFactory _sessionFactory;

    public NHibernateHelper(string connectionString)
    {
        _connectionString = connectionString;
    }

    public ISessionFactory SessionFactory
    {
        get { return _sessionFactory ?? (_sessionFactory = CreateSessionFactory()); }
    }

    private ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
               .Database(MsSqlConfiguration.MsSql2008.ConnectionString(_connectionString))
               .Mappings(m => m.FluentMappings.AddFromAssemblyOf<NHibernateHelper>())
               .Mappings(m => m.HbmMappings.AddClasses(typeof(Desk)))
               .BuildSessionFactory();
    }
}
公共类NHibernateHelper
{
私有只读字符串_connectionString;
私人ISessionFactory(sessionFactory);;
公共NHibernateHelper(字符串连接字符串)
{
_connectionString=connectionString;
}
公共会话工厂会话工厂
{
获取{return\u sessionFactory???(\u sessionFactory=CreateSessionFactory());}
}
私有ISessionFactory CreateSessionFactory()
{
流畅地返回。Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(_ConnectionString))
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.Mappings(m=>m.HbmMappings.AddClasses(typeof(Desk)))
.BuildSessionFactory();
}
}
public class NHibernateHelper
{
    private readonly string _connectionString;
    private ISessionFactory _sessionFactory;

    public NHibernateHelper(string connectionString)
    {
        _connectionString = connectionString;
    }

    public ISessionFactory SessionFactory
    {
        get { return _sessionFactory ?? (_sessionFactory = CreateSessionFactory()); }
    }

    private ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
               .Database(MsSqlConfiguration.MsSql2008.ConnectionString(_connectionString))
               .Mappings(m => m.FluentMappings.AddFromAssemblyOf<NHibernateHelper>())
               .Mappings(m => m.HbmMappings.AddClasses(typeof(Desk)))
               .BuildSessionFactory();
    }
}