C# Nhibernate,需要帮助修复我的select查询吗

C# Nhibernate,需要帮助修复我的select查询吗,c#,nhibernate,linq-to-nhibernate,C#,Nhibernate,Linq To Nhibernate,我是nhibernate的新手。我用的是nhibernate 3。下面是我需要做的,选择Id为1的用户。如果该用户不存在,则返回null var selectedUser=session.Query()。其中(u=>u.Id==1)。FirstOrDefault() 我的select查询不存在 这是我收到的错误信息 could not execute query\r\n[ select TOP (@p0) user0_.Id as Id0_, user0_.Username as Usernam

我是nhibernate的新手。我用的是nhibernate 3。下面是我需要做的,选择Id为1的用户。如果该用户不存在,则返回null

var selectedUser=session.Query()。其中(u=>u.Id==1)。FirstOrDefault()

我的select查询不存在

这是我收到的错误信息

could not execute query\r\n[ select TOP (@p0) user0_.Id as Id0_, user0_.Username as Username0_, user0_.Password as Password0_, user0_.CreateDate as CreateDate0_, user0_.Avatar as Avatar0_, user0_.AccountTypeId as AccountT6_0_, user0_.FirstName as FirstName0_, user0_.LastName as LastName0_, user0_.MiddleName as MiddleName0_, user0_.Email as Email0_, user0_.OtherId as OtherId0_ from [User] user0_ where user0_.Id=@p1 ]\r\n  Name:p1 - Value:1\r\n[SQL: select TOP (@p0) user0_.Id as Id0_, user0_.Username as Username0_, user0_.Password as Password0_, user0_.CreateDate as CreateDate0_, user0_.Avatar as Avatar0_, user0_.AccountTypeId as AccountT6_0_, user0_.FirstName as FirstName0_, user0_.LastName as LastName0_, user0_.MiddleName as MiddleName0_, user0_.Email as Email0_, user0_.OtherId as OtherId0_ from [User] user0_ where user0_.Id=@p1]"}
 [NHibernate.Exceptions.GenericADOException]: {"could not execute query\r\n[ select TOP (@p0) user0_.Id as Id0_, user0_.Username as Username0_, user0_.Password as Password0_, user0_.CreateDate as CreateDate0_, user0_.Avatar as Avatar0_, user0_.AccountTypeId as AccountT6_0_, user0_.FirstName as FirstName0_, user0_.LastName as LastName0_, user0_.MiddleName as MiddleName0_, user0_.Email as Email0_, user0_.OtherId as OtherId0_ from [User] user0_ where user0_.Id=@p1 ]\r\n  Name:p1 - Value:1\r\n[SQL: select TOP (@p0) user0_.Id as Id0_, user0_.Username as Username0_, user0_.Password as Password0_, user0_.CreateDate as CreateDate0_, user0_.Avatar as Avatar0_, user0_.AccountTypeId as AccountT6_0_, user0_.FirstName as FirstName0_, user0_.LastName as LastName0_, user0_.MiddleName as MiddleName0_, user0_.Email as Email0_, user0_.OtherId as OtherId0_ from [User] user0_ where user0_.Id=@p1]"}
Data: {System.Collections.ListDictionaryInternal}
HelpLink: null
InnerException: {"Invalid object name 'User'."}
Message: "could not execute query\r\n[ select TOP (@p0) user0_.Id as Id0_, user0_.Username as Username0_, user0_.Password as Password0_, user0_.CreateDate as CreateDate0_, user0_.Avatar as Avatar0_, user0_.AccountTypeId as AccountT6_0_, user0_.FirstName as FirstName0_, user0_.LastName as LastName0_, user0_.MiddleName as MiddleName0_, user0_.Email as Email0_, user0_.OtherId as OtherId0_ from [User] user0_ where user0_.Id=@p1 ]\r\n  Name:p1 - Value:1\r\n[SQL: select TOP (@p0) user0_.Id as Id0_, user0_.Username as Username0_, user0_.Password as Password0_, user0_.CreateDate as CreateDate0_, user0_.Avatar as Avatar0_, user0_.AccountTypeId as AccountT6_0_, user0_.FirstName as FirstName0_, user0_.LastName as LastName0_, user0_.MiddleName as MiddleName0_, user0_.Email as Email0_, user0_.OtherId as OtherId0_ from [User] user0_ where user0_.Id=@p1]"
Source: "NHibernate"
StackTrace: "   at NHibernate.Loader.Loader.DoList(ISessionImplementor session,    QueryParameters queryParameters)\r\n   at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)\r\n   at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)\r\n   at NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters)\r\n   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters)\r\n   at NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results)\r\n   at NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results)\r\n   at NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression, QueryParameters parameters)\r\n   at NHibernate.Impl.ExpressionQu
eryImpl.List()\r\n位于NHibernate.Linq.NhQueryProvider.ExecuteQuery(NhLinqExpression NhLinqExpression,IQuery query,NhLinqExpression nhQuery)\r\n位于NHibernate.Linq.NhQueryProvider.Execute(表达式表达式表达式)\r\n位于NHibernate.Linq.NhQueryProvider.Execute[TResult](表达式)\r\n位于System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)\r\n位于C:\code\net\DevelopmentStack\DevelopmentStack.Domain\Repositories\Concrete\NUserRepository.AddUser(用户用户用户)中的DevelopmentStack.Domain\Repositories\Concrete\NUserRepository.cs:第30行” TargetSite:{System.Collections.IList-DoList(NHibernate.Engine.ISessionImplementor,NHibernate.Engine.QueryParameters)}
>

这可能是因为User是一个保留关键字。如果在hbm中映射它,请确保在表名中提供了转义:`User(User应该被`I not write not right to markdown'包围)或[User]。两者之间的区别在于第二种语言不关心方言。

试试:

var selectedUser = session.Get<User>(1);
var selectedUser=session.Get(1);
当通过实体ID检索实体时,应始终使用Get而不是查询。如果实体不存在,则将返回null

var selectedUser = session.Get<User>(1);