2011-05-13 12 views
12

estoy usando Nhibernate 3.1/1.2 FluentNhibernateNHibernate 3.1 NHibernate.Linq.NhRelinqQueryParser excepción "secuencia contiene más de un elemento coincidente"

Cuando trabajo en modo de lanzamiento con CTRL + F5, no consigo ningún excepción. Pero en modo de depuración con F5 excepción siguiente ocurre:

Una aplicación de consola, por este código:

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

Excepción:

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

es posible que desee mostrar el valor de "predicado" –

Respuesta

4

en mi equipo que tenemos el mismo error con el mismo versiones de nHibernate y fluentnhibernate, de todos modos ese error aparece solo en una máquina (de 8). Parece un problema inherente a la depuración de Visual Studio, el mismo proyecto funciona bien si se inicia fuera de Visual Studio o si el proceso de depuración se realiza adjuntando el proceso desde el menú Depurar. Voy a investigar sobre esto lo antes posible, pero en este momento la depuración de esta PC se realiza de forma indirecta como se muestra arriba. Además, esta solicitud http://www.mail-archive.com/[email protected]/msg25959.html parece interesante.

+0

Más detalles aquí: http://groups.google.com/group/re-motion-users/browse_thread/thread/565a652b03682092. Probablemente un problema introducido en NH3.1. –

+0

Conozco ambas publicaciones. Cuando uso el código de arriba; en testdriven.net no tengo ningún problema, pero la aplicación resharper, mstest, consola, winform siempre recibo el mismo error. –

+0

Mismo problema para mí cuando ejecuto varios proyectos de inicio y depuración. Ejecutar sin depurar mi consulta LINQ funciona bien ... – felickz

0

Luché con este problema también durante un par de días tratando de descubrir por qué en el mundo yo era el único en mi equipo que obtenía ese error.

No estoy exactamente seguro de todas las rutas que tomé, sin embargo, en mi caso resultó ser un error de privilegios, aunque mi inicio de sesión de dominio era un administrador en el recuadro local, y estaba ejecutando todo en confianza total, y UAC estaba apagado.

El truco que hizo para mí fue eliminar por completo mi perfil de Windows y volverlo a crear. No tengo idea de qué estaba causando el problema en el perfil, pero funcionó para mí.

espero que esto ayude

-Diego

3

Uno de los miembros del equipo tenían este problema sólo cuando se depura con VSDEV.

Después de apagar IntelliTrace corrigió este problema.

+0

Apagar IntelliTrace solucionó el problema para nosotros. –

0

¡Compruebe la configuración de su inteligencia!

Para mí, funciona cuando solo se seleccionan eventos IntelliTrace. Cuando selecciono los eventos de IntelliTrace y la información de llamada, obtengo el error nhibernate.

0

Tuve el mismo problema, solo ocurre cuando intento utilizar la biblioteca NHibernate.Linq. (Estoy usando NHibernate 3.1 y NHibernate.Linq 1.0). No quería perder la capacidad de depurar mi aplicación en Visual Studio, así que convertí las llamadas NHibernate.Linq a NHibernate QueryOver API en su lugar, que es similar a Linq pero en realidad no lo usa.

Así que para su ejemplo de código, puede cambiar esto:

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

Para utilizar QueryOver lugar:

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

Si lo hace, usted debería ser capaz de depurar en Visual Studio ahora, sin obtener la misma excepción (al menos lo hice).

Cuestiones relacionadas