2011-05-13 4 views
12

내가 NHibernate에 3.1을 사용하고 있습니다 "시퀀스는 하나 이상의 일치하는 요소를 포함"/ FluentNhibernate 1.2NHibernate에 3.1 NHibernate.Linq.NhRelinqQueryParser 예외

내가 CTRL + F5와 릴리스 모드에서 작동, 내가하지 않는 예외. 그러나 F5 다음을 제외하고 디버그 모드에서 발생

콘솔 응용 프로그램을,이 코드 :

_Session.Query<Foo>().Where (x=>x.Bar == "bar").FirstOrDefault() 

예외 :

System.TypeInitializationException was unhandled 
    Message=The type initializer for 'NHibernate.Linq.NhRelinqQueryParser' threw an exception. 
    Source=NHibernate 
    TypeName=NHibernate.Linq.NhRelinqQueryParser 
    StackTrace: 
     at NHibernate.Linq.NhRelinqQueryParser.Parse(Expression expression) 
     at NHibernate.Linq.NhLinqExpression.Translate(ISessionFactoryImplementor sessionFactory) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhLinqExpression.cs:line 65 
     at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryIdentifier, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR\ASTQueryTranslatorFactory.cs:line 27 
     at NHibernate.Engine.Query.HQLExpressionQueryPlan.CreateTranslators(String expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Query\HQLExpressionQueryPlan.cs:line 34 
     at NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Query\HQLExpressionQueryPlan.cs:line 23 
     at NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String expressionStr, IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Query\HQLExpressionQueryPlan.cs:line 21 
     at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Query\QueryPlanCache.cs:line 88 
     at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\AbstractSessionImpl.cs:line 312 
     at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\AbstractSessionImpl.cs:line 268 
     at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression expression, IQuery& query, NhLinqExpression& nhQuery) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:line 43 
     at NHibernate.Linq.NhQueryProvider.Execute(Expression expression) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:line 26 
     at NHibernate.Linq.NhQueryProvider.Execute[TResult](Expression expression) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:line 103 
     at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source) 
     at x.Persistence.NH.NHibernateUnitOfWork.<>c__DisplayClass11`1.<FindOne>b__10() in D:\x\x\x.Persistence.NH\NHibernateUnitOfWork.cs:line 71 
     at x.Persistence.NH.NHibernateUnitOfWork.Transactional[TResult](Func`1 func) in D:\x\x\x.Persistence.NH\NHibernateUnitOfWork.cs:line 88 
     at x.Persistence.NH.NHibernateUnitOfWork.FindOne[T](Expression`1 predicate) in D:\x\x\x.Persistence.NH\NHibernateUnitOfWork.cs:line 71 
     at Sample.Sam.Start() in D:\x\x\Sample\Sam.cs:line 28 
     at Sample.Sam.Main() in D:\x\x\Sample\Sam.cs:line 16 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.InvalidOperationException 
     Message=Sequence contains more than one matching element 
     Source=System.Core 
     StackTrace: 
      at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate) 
      at Remotion.Data.Linq.Parsing.ExpressionTreeVisitors.Transformation.ExpressionTransformerRegistry.CreateDefault() in :line 0 
      at NHibernate.Linq.NhRelinqQueryParser..cctor() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhRelinqQueryParser.cs:line 26 
     InnerException: 
+0

"predicate"값을 표시하려는 경우 –

답변

4

내 팀에 우리는 같은를 사용하여 동일한 오류가 nHibernate와 fluentnhibernate의 버전은 어쨌든 하나의 머신에서만 에러가 나타난다. 그것은 비주얼 스튜디오의 디버그가 내재적으로 문제가있는 것처럼 보입니다. 비주얼 스튜디오 외부에서 시작된 경우 또는 디버그 메뉴에서 프로세스를 연결하여 디버그 프로세스를 수행하는 경우 동일한 프로젝트가 잘 실행됩니다. 나는 가능한 한 빨리 이것을 조사 할 것이지만,이 순간에이 pc의 디버그는 위에 묘사 된 것처럼 간접적으로 수행됩니다. 또한,이 요청 http://www.mail-archive.com/[email protected]/msg25959.html은 흥미로운 것 같습니다.

+0

자세한 내용은 http://groups.google.com/group/re-motion-users/browse_thread/thread/565a652b03682092를 참조하십시오. 아마도 NH3.1에서 도입 된 문제 일 것입니다. –

+0

나는이 두 게시물을 알고있다. 위 코드를 사용할 때; testdriven.net에서 나는 문제가 없지만, resharper, mstest, 콘솔 응용 프로그램, winform app은 항상 같은 오류가 발생합니다. –

+0

여러 시작 프로젝트를 실행하고 디버깅 할 때 같은 문제가 발생합니다. 내 LINQ 쿼리를 디버깅하지 않고 실행하면 ... – felickz

0

나는이 문제를 해결하기 위해 며칠간 노력했는데, 전 세계에서 왜 저의 팀원 중 유일하게 그 실수를 저질렀는지 알아 내려고했습니다.

도메인 로그인이 로컬 상자의 관리자인데도 내 경우에는 권한 오류로 판명되었지만 모든 것을 실행하고있었습니다. 완전 신뢰, UAC가 꺼졌습니다.

나를 위해했던 속임수는 완전히 내 Windows 프로필을 삭제하고 다시 만들었습니다. 프로필에서 무엇이 문제를 일으키는 지 전혀 알지 못합니다. 그러나 그것은 저에게 효과적이었습니다.

희망이 그가 VSDEV으로 디버깅 할 때 팀 구성원의

-Diego

3

하나는이 문제를 가지고하는 데 도움이됩니다.

IntelliTrace를 끄면이 문제가 해결됩니다.

+0

IntelliTrace를 끄면 문제가 해결되었습니다. –

0

지능형 설정을 확인하십시오!

나를 위해, IntelliTrace 이벤트 만 선택하면 작동합니다. IntelliTrace 이벤트가 있고 선택한 정보를 호출 할 때 nhibernate 버그가 발생합니다.

0

이 문제는 NHibernate.Linq 라이브러리를 사용하려고 할 때만 발생합니다. (나는 NHibernate 3.1과 NHibernate.Linq 1.0을 사용하고있다.) Visual Studio에서 내 응용 프로그램을 디버깅 할 수있는 능력을 잃고 싶지 않았기 때문에 NHibernate.Linq 호출을 대신 Linq와 비슷한 NHibernate QueryOver API로 변환했지만 실제로 사용하지는 않습니다.

그래서 당신의 코드 예를 들어, 당신이 바꿀 수 :

_Session.Query<Foo>().Where(x => x.Bar == "bar").FirstOrDefault(); 

대신 QueryOver를 사용하려면 : 당신이 그렇게한다면

_Session.QueryOver<Foo>().Where(x => x.Bar == "bar").List().FirstOrDefault(); 

, 당신은 이제 Visual Studio에서 디버깅 할 수 있어야한다, 동일한 예외 (적어도 내가 한)를 얻지 않고.