.net NHibernate Fluent和命名查询
我有一个名为Queryé的函数,我喜欢将它的结果映射到一个类上.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
<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();
}
}