nhibernate命名查询,找不到名称

Joh*_*nam 1 c# nhibernate named

我来自Java方面使用Hibernate而我还没有找到合适的位置来放置命名查询NHibernate.

使用Visual Studio 2008,C#2008

我有一个问题

<query name="SchwabAccountList">
  from DB_Accounts a
  where a.AdminOffCode = 'SWB'
</query>
Run Code Online (Sandbox Code Playgroud)

我想把它放在.hbm.xmlAccount表中(DB_Accounts)

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

    <query name="AccountList">
      from DB_Accounts a
      where a.AdminOffCode = 'SWB'
    </query>
  </class>
</hibernate-mapping> 
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码,我尝试了几种不同的方法,但得到了

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)
              {
                         ...
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Joh*_*nam 5

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

我现在有:

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

这很有效