2009-11-26 5 views
0

J'ai le nom de Queryé, dont le résultat me plaît dans une classe.NHibernate Fluent and named Queries

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

J'ai aussi une classe 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; }   

    } 

Maintenant, tout en commençant le programme que je reçois le exceptione Une configuration incorrecte ou incomplète a été utilisée lors de la création d'une SessionFactory. Vérifiez la collection PotentialReasons et InnerException pour plus de détails.

InnerExceptioné "La clé donnée n'était pas présente dans le dictionnaire."

Si j'utilise la requête sans la classe de retour, alors cela fonctionne bien sauf que j'obtiens la valeur de retour non mappée dans une classe. Mais la classe est définitivement dans l'assemblée. Comment mapper la requête dans une classe?

Merci beaucoup

Répondre

0

Après quelques bidouillages je suis convaincu que je ne peux mapper la sortie de certains SP à une classe qui a une cartographie à la DB.

Donc juste avoir un sp et le mapper à une classe ne fonctionnera pas. la classe doit avoir un mappage, donc la classe doit être une classe du modèle de domaine.

0

Je n'ai aucun mappage de classe sur la base de données. Le code ci-dessous a fonctionné pour moi. Où Desk est défini dans le fichier 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(); 
    } 
}