2011-12-23 3 views
0

Я новичок в nhibernate. тот, который я использую, - это nhibernate 3. вот что мне нужно сделать, выберите пользователя, его идентификатор равен 1. Если этот пользователь не существует, верните его обратно.Nhibernate, нужна помощь для исправления моего запроса на выбор

var selectedUser = session.Query(). Где (u => u.Id == 1) .FirstOrDefault();

   if (selectedUser == null) 
       { 
        userID = (int)session.Save(user); 
       } 

мой запрос выбора нет.

вот сообщение об ошибке, которое я получил.

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 [email protected] ]\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 [email protected]]"} 
[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 [email protected] ]\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 [email protected]]"} 
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 [email protected] ]\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 [email protected]]" 
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() \ г \ п на NHibernate.Linq.NhQueryProvider.ExecuteQuery (NhLinqExpression nhLinqExpression, IQuery запроса, NhLinqExpression nhQuery) \ г \ п на NHibernate.Linq.NhQueryProvider.Execute (выражение Выражение) \ r \ n в NHibernate.Linq.NhQueryProvider.Execute [TResult] (выражение выражения) \ r \ n в System.Linq.Queryable.FirstOrDefault [TSource] (источник IQueryable'1) \ r \ n в DevelopmentStack.Domain.Repositories .Concrete.NUserRepository.AddUser (Пользователь пользователя) в C: \ code \ net \ DevelopmentStack \ DevelopmentStack.Domain \ Repositories \ Concrete \ NUserRepository.cs: строка 30 " TargetSite: {System.Collections.IList DoList (NHibernate.Engine. ISessionImplementor, NHibernate.Engine.QueryParameters)} >

ответ

1

Возможно, это связано с тем, что Пользователь является зарезервированным ключевым словом. Если вы сопоставили его в hbm, убедитесь, что вы указали escapes в имени таблицы: «Пользователь (пользователь должен быть окружен« Я не могу правильно писать из-за уценки) или [Пользователь]. Разница между ними состоит в том, что второй не заботится о диалекте.

0

Try:

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

Вы должны всегда использовать Получить вместо запроса при получении примитива его ID. Если объект не существует, то null будет возвращен.

Смежные вопросы