NHibernate 3.1 NHibernate.Linq.NhRelinqQueryParser 异常 “序列包含多
本文关键字:NHibernate 包含多 序列包含多 异常 Linq NhRelinqQueryParser | 更新日期: 2023-09-27 17:56:16
我正在使用Nhibernate 3.1/FluentNhibernate 1.2
当我使用 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:
团队中,使用相同的nHibernate和Fluentnhibernate时,我们遇到了同样的错误,无论如何,该错误只出现在一台机器上(共8台)。这似乎是Visual Studio调试固有的问题,如果在Visual Studio之外启动,或者如果调试过程是通过从"调试"菜单附加进程来完成的,则同一项目运行良好。我会尽快对此进行调查,但目前这台电脑的调试是间接完成的,如上所述。此外,这个请求似乎 http://www.mail-archive.com/nhusers@googlegroups.com/msg25959.html 有趣。
其中一位团队成员仅在使用 VSDEV 进行调试时才遇到此问题。
在我们关闭智能跟踪后修复了此问题。
这个问题苦苦挣扎了几天,试图弄清楚为什么世界上我是团队中唯一一个出现该错误的人。
我并不完全确定我采取的所有路径,但是,就我而言,事实证明这是一个权限错误,即使我的域登录是本地盒子上的管理员,并且我在完全信任下运行所有内容,并且 UAC 已关闭。
为我做的诀窍是完全删除我的 Windows 配置文件并再次重新创建它。我不知道配置文件中是什么导致了问题,但它对我有用。
希望这有帮助
-迭 戈
检查您的智能跟踪设置!
对我来说,当仅选择智能跟踪事件时,它有效。当我选择了智能跟踪事件和调用信息时,我得到 nhibernate 错误。
我遇到了同样的问题,它仅在我尝试使用NHibernate.Linq库时才会发生。 (我使用的是 NHibernate 3.1 和 NHibernate.Linq 1.0)。 我不想失去在Visual Studio中调试应用程序的能力,所以我将NHibernate.Linq调用转换为NHibernate QueryOver API,它类似于Linq,但实际上并不使用它。
因此,对于您的代码示例,您可以更改以下内容:
_Session.Query<Foo>().Where(x => x.Bar == "bar").FirstOrDefault();
要改用 QueryOver,请执行以下操作:
_Session.QueryOver<Foo>().Where(x => x.Bar == "bar").List().FirstOrDefault();
如果你这样做了,你现在应该能够在Visual Studio中进行调试,而不会得到同样的异常(至少我做到了)。