nhibernate命名查询,找不到名称

时间:2009-10-15 20:42:22

标签: c# nhibernate named

我来自Java方面使用Hibernate而我还没找到将命名查询放在NHibernate中的适当位置。

使用Visual Studio 2008,C#2008

我有一个查询

<query name="SchwabAccountList">
  from DB_Accounts a
  where a.AdminOffCode = 'SWB'
</query>

我希望将其放入帐户表.hbm.xmlDB_Accounts

我把它放在文件的末尾但在<class>标记

    <query name="AccountList">
      from DB_Accounts a
      where a.AdminOffCode = 'SWB'
    </query>
  </class>
</hibernate-mapping> 

我正在使用的代码,我已经尝试了几种不同的方法但是

Named query not known: AccountList

或我尝试使用的任何其他名称(assembly.dir.dir.class.queryname)。

访问代码看起来像。

              ISessionFactory factory = cfg.BuildSessionFactory();
              ISession session = factory.OpenSession();

              IList<DB_Accounts> accountList = 
                  (IList<DB_Accounts>)(session.GetNamedQuery("AccountList").List());

              foreach (BDM_Controller.Source.ORM.DB_Accounts acctRec in accountList)
              {
                         ...

我错过了什么?

3 个答案:

答案 0 :(得分:5)

我将查询移到了标记之外,让它识别出查询。我之前在映射文件的顶部有它,它抱怨下面的标记。这可能是单引号的问题。我添加了CDATA包装器以防止这些问题。所以这两个变化的组合可能解决了这个问题。

我现在有:

  </class>
  <query name="AccountList" cacheable="true" read-only="true">
    <![CDATA[
      from DB_Accounts a
      where a.AdminOffCode = 'SWB'
      ]]>
  </query>
</hibernate-mapping> 

这是有效的

答案 1 :(得分:3)

另外,请确保您的映射文件Build Action设置为“Embedded Resource”,否则即使映射文件本身正确,您也会收到相同的错误。

答案 2 :(得分:0)

还要确保hbm文件添加了扩展名.hbm.xml而不仅仅是.xml。这也会导致同样的错误。