用NHibernate写了个小留言本,所有操作都正常
但不知怎么IQuery都出现错误
ISession session = SessionUtil.OpenSession();
IQuery q = session.CreateQuery("from GuestBook gb order by gb.Id desc ");
IList list = q.List();
session.Close();
上面代码老是提示错误,我没有感觉那里错误呀错误信息:
in expected: gb [from GuestBook gb order by gb.Id desc ]
异常详细信息: NHibernate.QueryException: in expected: gb [from GuestBook gb order by gb.Id desc ]
堆栈跟踪: [QueryException: in expected: gb [from GuestBook gb order by gb.Id desc ]]
   NHibernate.Hql.FromParser.Token(String token, QueryTranslator q) +1761
   NHibernate.Hql.ClauseParser.Token(String token, QueryTranslator q) +1139
   NHibernate.Hql.PreprocessingParser.Token(String token, QueryTranslator q) +652
   NHibernate.Hql.ParserHelper.Parse(IParser p, String text, String seperators, QueryTranslator q) +173
   NHibernate.Hql.QueryTranslator.Compile() +174
   NHibernate.Hql.QueryTranslator.Compile(ISessionFactoryImplementor factory, IDictionary replacements, Boolean scalar) +67
   NHibernate.Impl.SessionFactoryImpl.GetQuery(String queryString, Boolean shallow) +138
   NHibernate.Impl.SessionImpl.GetQueries(String query, Boolean scalar) +22
   NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters) +167
   NHibernate.Impl.QueryImpl.List() +94
   GuestBook.Web.Default.BindData() in d:\programdotnet\nhibernate\guestbook\guestbook.web\default.aspx.cs:76
   GuestBook.Web.Default.Page_Load(Object sender, EventArgs e) in d:\programdotnet\nhibernate\guestbook\guestbook.web\default.aspx.cs:40
   System.Web.UI.Control.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +35
   System.Web.UI.Page.ProcessRequestMain() +750但这样可以
ISession session = SessionUtil.OpenSession();
NHibernate.ICriteria crit = session.CreateCriteria(typeof(GuestBook.Domain.Guestbook));
IList list = crit.List();
session.Close();
请各位指点
另外请问怎么查看NHibernate动态生成的SQL语句呢??

解决方案 »

  1.   

    试试 IQuery q = session.CreateQuery("from GuestBook order by Id desc ");怎么查看NHibernate动态生成的SQL语句
    ------------
    要配置log4net的.(具体o也不清楚,NHibernate文档中有说明的)
      

  2.   

    @jianyi0115(随意) 
     IQuery q = session.CreateQuery("from GuestBook order by Id desc ");
    这样应该是不行的
      

  3.   

    不同release版本的NHibernate的HQL构造和支持不太一样。
    先试试如下行不行:
    using System.Collections;
    using NHibernate;
    using NHibernate.Expression;
    using 你的实体类程序集;不行的话在session里加上返回类型typeof(GuestBook)
    还不行的话看看你那版本NHibernate代码目录下readme文件看看该release中支持hql中order与否,需不需要加using(new sessionscope()){}控制资源。还有问题发社区短信给我。
      

  4.   

    唉,问题还是没有解决呀@zeusvenus(清柳)(C#/ASP.NET) 
    已给你发社区短信
    请查收,谢谢
      

  5.   

    把你程序集和问题代码发到我邮箱[email protected]
    我来调试
      

  6.   

    "from GuestBook.Domain.Guestbook gb ..."
    这样试试,我现在用的还是0.7版的,不太清楚新版本的hql有些什么改进的地方。
      

  7.   

    铁锋您好!
    我的Gmail这几天老登陆不了,今天才下下来你的DEMO代码看了一下,写法什么都是对的,唯一的问题是有个小错误,你的实体类是小写的,大写的是基类,改一下就行了。IQuery q = session.CreateQuery("from GuestBook order by Id desc ");
    ---------------------------------------------------------------------改为
    IQuery q = session.CreateQuery("from Guestbook order by Id desc ");给我的代码已经调试通过了,但就这点小改动没必要再发回去,其他有问题再联系。
      

  8.   

    不好意思,应该改为
    IQuery q = session.CreateQuery("from Guestbook gb order by gb.Id desc ");
    copy错了。
      

  9.   

    谢谢各位
    谢谢 zeusvenus(清柳)
    问题zeusvenus已帮我解决