日期:2014-05-18  浏览次数:21140 次

使用NHibernate过程中 出现的奇怪问题
本人刚接触NHibernate 做了一个小demo 代码如下
C# code

 private void Form1_Load(object sender, EventArgs e)
        {
            Configuration cfg = new Configuration().Configure();
            ISessionFactory Factory = cfg.BuildSessionFactory();
            ISession session = Factory.OpenSession();
            IQuery query = session.CreateQuery("from Login");
            IList<Login> list = query.List<Login>();

            foreach (Login login in list)
            {
                MessageBox.Show(login.Name);
            }
        }


运行 没问题。
接下来的 我将代码小小改动了一下
C# code

public class Nhelp
    {
        public IList<T> Query<T>()
        {
            Configuration cfg = new Configuration().Configure();
            ISessionFactory Factory = cfg.BuildSessionFactory();
            ISession session = Factory.OpenSession();
            IQuery query = session.CreateQuery("from login");
            IList<T> list = query.List<T>();
            return list;
        }
    }

写了一个 Nhelp 类 
调用
C# code

 private void Form1_Load(object sender, EventArgs e)
        {
            Nhelp help = new Nhelp();
            IList<Login> list = help.Query<Login>();
            foreach (Login login in list)
            {
                MessageBox.Show(login.Name);
            }
        }


只是做了一个简单的封装,运行
在 Nhelp 类的 IQuery query = session.CreateQuery("from login");
出 报错 login is not mapped [from login]
错误代码
未处理 NHibernate.Hql.Ast.ANTLR.QuerySyntaxException
  Message="login is not mapped [from login]"
  Source="NHibernate"
  QueryString="from login"
  StackTrace:
  在 NHibernate.Hql.Ast.ANTLR.SessionFactoryHelperExtensions.RequireClassPersister(String name)
  在 NHibernate.Hql.Ast.ANTLR.Tree.FromElementFactory.AddFromElement()
  在 NHibernate.Hql.Ast.ANTLR.Tree.FromClause.AddFromElement(String path, IASTNode alias)
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.CreateFromElement(String path, IASTNode pathNode, IASTNode alias, IASTNode propertyFetch)
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElement()
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElementList()
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromClause()
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.unionedQuery()
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.query()
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectStatement()
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.statement()
  在 NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate()
  在 NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Analyze(String collectionRole)
  在 NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 replacements, Boolean shallow, String collectionRole)
  在 NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary`2 replacements, Boolean shallow)
  在 NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
  在 NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryString, String collectionRole, Boolean shallow, IDictionary`2 fi