NHibernate свободно и по имени запросы - PullRequest
0 голосов
/ 26 ноября 2009

У меня есть следующее имя 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>

Также у меня есть класс 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. Проверьте коллекцию PotentialReasons и InnerException для более подробной информации.

InnerExceptioné "Указанный ключ отсутствует в словаре."

Если я использую Query без возвращаемого класса, он работает хорошо, за исключением того, что я получаю возвращаемое значение, не сопоставленное с классом. Но класс определенно в сборке. Как я могу сопоставить запрос в классе?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2013

У меня нет отображения классов в БД. Ниже код работал для меня. Где 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();
    }
}
0 голосов
/ 14 декабря 2009

После некоторого взлома я убежден, что могу отобразить только вывод некоторого SP в Class, который имеет отображение в DB.

Так что просто иметь sp и сопоставить его с каким-то классом не получится. класс должен иметь отображение, поэтому класс должен быть классом модели предметной области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...