Una consulta particular de LINQ-to-SQL que selecciona campos de una vista de SQL Server en un programa C# que se ejecuta en una base de datos de SQL Server 2008, que funciona bien en mi entorno de desarrollo local, produce una excepción cuando se ejecuta en el entorno de ensayo:
Exception Message: An error occurred while executing the command definition. See the inner exception for details. Exception Trace: System.Data.Entity.Core.EntityCommandExecutionException at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.b__5() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery`1..GetEnumerator>b__0() at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at [my code ...]¿Qué está causando que ocurra esta excepción?
Esto puede deberse a una consulta LINQ que intenta seleccionar un campo que en realidad no existe en la vista o tabla de la base de datos de destino.
Una forma en que esto puede suceder (que fue el problema en mi caso) es descuidar la implementación en el entorno de destino de una migración de Entity Framework creada recientemente que agrega el nuevo campo a la vista que se consulta.
Otra cosa a tener en cuenta es la excepción interna de la EntityCommandExecutionException lanzada (como sugiere el mensaje de error). En este caso, la excepción interna era del tipo SqlException y tenía el útil mensaje Invalid column name '[my column name]' .
Por lo tanto, las cosas a tener en cuenta cuando se lanza una EntityCommandExecutionException en EntityCommandDefinition.ExecuteStoreCommands al ejecutar una consulta LINQ-to-SQL:
Esto puede deberse a que faltan "Conjuntos de resultados activos múltiples" en la cadena de conexión.
Conjuntos de resultados activos múltiples (MARS) es una característica que permite la ejecución de múltiples lotes en una sola conexión. En versiones anteriores, solo se podía ejecutar un lote a la vez contra una sola conexión. La ejecución de múltiples lotes con MARS no implica la ejecución simultánea de operaciones.
Arreglar:
string connectionString = "Data Source=MSSQL1;" + "Initial Catalog=AdventureWorks;Integrated Security=SSPI;" + "MultipleActiveResultSets=True";Me ayudó el acceso a la propiedad Local como. La excepción :
foreach (var myTableObject in context.Table) { // Exception } foreach (var myTableObject in context.Table.Local) { // No exception }