Pregunta ¿Qué puede causar una EntityCommandExecutionException en EntityCommandDefinition.ExecuteStoreCommands?


Una consulta particular de LINQ a 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?


14
2018-06-11 15:24


origen


Respuestas:


Esto puede deberse a una consulta LINQ que intenta seleccionar un campo que no existe realmente en la vista o tabla de la base de datos de destino.

Una forma en que esto puede suceder (que era el problema en mi caso) es descuidar la implementación en el entorno de destino de una migración de Entity Framework recientemente creada que agrega el nuevo campo a la vista que se está consultando.

Otra cosa que hay que observar es la excepción interna de EntityCommandExecutionException arrojado (como lo sugiere el mensaje de error). En este caso, la excepción interna era de tipo SqlException y tenía el mensaje útil Invalid column name ‘[my column name]’.

Por lo tanto, aspectos a tener en cuenta cuando se genera una EntityCommandExecutionException en EntityCommandDefinition.ExecuteStoreCommands cuando se ejecuta una consulta LINQ-to-SQL:

  • Examine la excepción interna (como lo sugiere el mensaje de error de la excepción externa).
  • Asegúrese de que todas las migraciones de Entity Framework se hayan implementado en el entorno de destino (si EF está en uso).
  • Compruebe y vea si la consulta está intentando seleccionar un campo que no existe.

18
2018-06-11 15:24



Esto puede ser causado por "Conjuntos de resultados activos múltiples" falta en la conexión Cadena.

Múltiples conjuntos de resultados activos (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 con una sola conexión. Ejecutar 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";

8
2018-06-23 10:25



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
}

0
2017-07-27 11:41



Preguntas populares