2009-11-26 80 views
0

我有以下名为查特,其结果我喜欢映射到一个类。NHibernate流利和命名查询

<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> 

另外我有一个C#类

public class IndustryCode 
    { 
     public virtual string Sector_kategorie { get; set; } 
     public virtual string Sector_scheme_reference { get; set; } 
     public virtual string Sector_Beschreibung { get; set; } 
     public virtual string Group_kategorie { get; set; } 
     public virtual string Group_scheme_reference { get; set; } 
     public virtual string Group_Beschreibung { get; set; } 
     public virtual string Industry_kategorie { get; set; } 
     public virtual string Industry_scheme_reference { get; set; } 
     public virtual string Industry_Beschreibung { get; set; } 
     public virtual string Subindustry_kategorie { get; set; } 
     public virtual string Subindustry_scheme_reference { get; set; } 
     public virtual string Subindustry_Beschreibung { get; set; }   

    } 

现在同时启动程序,我得到在创建一个SessionFactory的exceptioné 一个无效或不完整的配置使用。请参阅PotentialReasons集合和InnerException以获取更多详细信息。

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

如果我使用的查询,而无需返回类,那么它工作得很好,只是我没有得到映射到一个类的返回值。但是班级肯定在大会上。 如何将查询映射到类中?

非常感谢你

回答

0

一些黑客我相信,我可以将某些SP的输出只映射到具有映射到数据库的下课。

所以只要有一个sp并将其映射到某个类将不起作用。该类必须具有映射,因此该类必须是域模型的一个类。

0

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

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(); 
    } 
}