1

我有一个基本的控制台应用程序,我在其中使用 NHibernate V2.x 来学习它。它配置了 FluentHibernate。执行 hql 查询以从用户表中获取所有用户时,我遇到了一个奇怪的异常。我知道用户是保留关键字,

所以我尝试SELECT * FROM [User]了,它在方法上效果很好,CreateSqlQuery但是下面却失败了,除了例外

Method 'HasAncestor' in type 'NHibernate.Hql.Ast.ANTLR.Tree.ASTNode' from assembly 'NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' does not have an implementation.

这里也提到。以下是我的控制台应用程序中的所有内容,你能指出什么是错的

            ISessionFactory factory = CreateSessionFactory();

            //read using HQL the 500 users
            using (ISession dbSession = factory.OpenSession())
            {
                var users = dbSession.CreateQuery("from user").List();
            }

Dropbox 链接到解决方案(源 + 数据库 + 配置)

https://dl.dropboxusercontent.com/u/29815170/HQL.zip

注意:请在代码中更改您的数据库连接

4

1 回答 1

1

我几乎可以肯定地说,这是小写/大写的问题。HQL 解析器(ANTLR 引擎)生成区分大小写的语句。因为,在 C# 中,我们使用 Pascal 样式作为类名,我会说你的类是User

HQL 在 Entity/C# 模型之上工作。所以这应该/必须有效:

var users = dbSession.CreateQuery("from User").List(); // U is in capital
于 2013-11-09T05:00:04.357 回答