在session.GetNamedQuery()上获取“命名查询不知道”错误

时间:2011-02-25 11:23:31

标签: nhibernate session hbm

调用session.GetNamedQuery()时,我一直得到一个“命名查询未知”的MappingException。我正在使用Fluent和NHibernate 3.0,我在hbm.xml文件中有查询。为了简单起见,我在同一个程序集中拥有所有内容。我已将xml文件上的Build Action设置为“Embedded Resource”。

我的配置如下所示:

var nhConfig = Fluently.Configure()
                    .Database(SQLAnywhereConfiguration
                  .SQLAnywhere10
                  .ConnectionString("uid='dba'; pwd='sql'; dsn=db"))
                  .ExposeConfiguration(c => c.SetProperty("current_session_context_class", "thread_static"))
                  .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Party>())
                  .BuildConfiguration();

            var sessionFactory = nhConfig.BuildSessionFactory();


            ISession session = sessionFactory.OpenSession();
            CurrentSessionContext.Bind(session);


            NHibernate.IQuery q = session.GetNamedQuery("GetFirstParty");

我的GetFirstParty.hbm.xml文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

  <query name="GetFirstParty">
    <![CDATA[from Party p where p.CaseNumber = :CaseNumber]]>
  </query>

</hibernate-mapping>

我在这里缺少什么?

请帮忙。

谢谢,

麦克

1 个答案:

答案 0 :(得分:8)

您需要在流畅的配置中包含HBM映射:

var nhConfig = Fluently.Configure()
                  .Database(SQLAnywhereConfiguration
                  .SQLAnywhere10
                  .ConnectionString("uid='dba'; pwd='sql'; dsn=db"))
                  .ExposeConfiguration(c => c.SetProperty(Environment.CurrentSessionContextClass, "thread_static"))
                  .Mappings(m => 
                  {
                    m.FluentMappings.AddFromAssemblyOf<Party>();
                    m.HbmMappings.AddFromAssemblyOf<Party>();
                  })
                  .BuildConfiguration();