获取NHibernate错误抛出类型'Antlr.Runtime.NoViableAltException'的异常

Eri*_*itz 6 c# nhibernate nhibernate-mapping

我在查询包含其名称空间的表时遇到了一些问题

如果我写一个sql-query它工作正常,即SELECT*FROM [product groups],但是当使用NHibernate CreateQuery时,一切都会中断

using (ISession session = SessionFactory.OpenSession())
{
    IQuery query = session.CreateQuery("FROM [product groups]");
    IList<ProductGroups> results = query.List<ProductGroups>();
}
Run Code Online (Sandbox Code Playgroud)

会产生错误

抛出了类型'Antlr.Runtime.NoViableAltException'的异常.靠近第1行,第5列

NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse()中的NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException()
...

如果我使用CreateSQLQuery它的工作原理

ISQLQuery query = session.CreateSQLQuery("SELECT ID, Title, [Available as develop] FROM [product groups]").AddEntity(typeof(ProductGroups));
IList<ProductGroups> results = query.List<ProductGroups>();
Run Code Online (Sandbox Code Playgroud)

映射文件如下所示

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="ListModels.ProductGroups, ListModels" lazy="true" table="Product groups">
    <id name="ID">
      <generator class="native" />
    </id>
    <property name="Title" />
    <property name="AvailableAsDevelopmentLicense" column="Available as develop" />
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

为什么CreateQuery不起作用?

Rad*_*ler 7

的CreateQuery(),描述如下:9.3.2.IQuery接口是如何使用14. HQL查询实体的方法:Hibernate查询语言.

即,您必须使用您的域模型名称ProductGroups 而不是表名称[product groups]

//IQuery query = session.CreateQuery("FROM [product groups]");
IQuery query = session.CreateQuery("FROM ListModels.ProductGroups as pg");
Run Code Online (Sandbox Code Playgroud)