我来自Java方面使用Hibernate而我还没找到将命名查询放在NHibernate
中的适当位置。
使用Visual Studio 2008,C#2008
我有一个查询
<query name="SchwabAccountList">
from DB_Accounts a
where a.AdminOffCode = 'SWB'
</query>
我希望将其放入帐户表.hbm.xml
中DB_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)
{
...
我错过了什么?
答案 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。这也会导致同样的错误。