Estoy obteniendo tiempos de espera usando Entity Framework (EF) cuando uso una función de importación que demora más de 30 segundos en completarse. Intenté lo siguiente y no he podido resolver este problema:
He añadido Default Command Timeout=300000
a la cadena de conexión en el app.config archivo en el proyecto que tiene el archivo EDMX como se sugiere aquí .
Así es como se ve mi cadena de conexión:
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
Intenté configurar CommandTimeout en mi repositorio directamente así:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
¿Qué más puedo hacer para que el EF se agote? Esto solo sucede para conjuntos de datos muy grandes. Todo funciona bien con pequeños conjuntos de datos.
Aquí está uno de los errores que obtengo:
System.Data.EntityCommandExecutionException: se produjo un error al ejecutar la definición del comando. Vea la excepción interna para más detalles. ---> System.Data.SqlClient.SqlException: expiró el tiempo de espera. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde.
OK, tengo esto funcionando y es tonto lo que pasó. Tenía tanto la cadena de conexión con Default Command Timeout=300000
CommandTimeout configurada en 180. Cuando eliminé Default Command Timeout
la cadena de conexión, funcionó. Entonces, la respuesta es configurar manualmente CommandTimeout en su repositorio en su objeto de contexto de la siguiente manera:
this.context.CommandTimeout = 180;
Aparentemente, la configuración del tiempo de espera en la cadena de conexión no tiene ningún efecto.
fuente
"
en la cuerda.NONCLUSTERED
índices a algunas de las tablas, esto resolvió el problema del tiempo de espera para nosotros.Respuestas:
Existe un error conocido al especificar el tiempo de espera predeterminado del comando dentro de la cadena de conexión EF.
http://bugs.mysql.com/bug.php?id=56806
Elimine el valor de la cadena de conexión y configúrelo en el objeto de contexto de datos. Esto funcionará si elimina el valor en conflicto de la cadena de conexión.
Entity Framework Core 1.0:
Entidad Marco 6:
Entidad Marco 5:
Entity Framework 4 y siguientes:
fuente
this.Database.SetCommandTimeout(180);
Si está utilizando un DbContext, use el siguiente constructor para configurar el tiempo de espera del comando:
fuente
DbContext
clase derivada se generó automáticamente a partir de unedmx
archivo?Si está utilizando
DbContext
y EF v6 +, alternativamente puede usar:fuente
Usualmente manejo mis operaciones dentro de una transacción . Como he experimentado, no es suficiente establecer el tiempo de espera del comando de contexto, pero la transacción necesita un constructor con un parámetro de tiempo de espera. Tuve que establecer ambos valores de tiempo de espera para que funcione correctamente.
Al final de la función, retrasé el tiempo de espera del comando al valor anterior en anterior.
Usando EF6
fuente
Sé que este es un hilo muy antiguo en ejecución, pero EF aún no lo ha solucionado. Para las personas que usan autogenerado
DbContext
pueden usar el siguiente código para configurar el tiempo de espera manualmente.fuente
Si está utilizando Entity Framework como yo, debe definir el tiempo de espera en la clase de inicio de la siguiente manera:
fuente
Esto es lo que he financiado. Tal vez ayude a alguien:
Así que, aquí vamos:
Si usa LINQ con EF buscando algunos elementos exactos contenidos en la lista como este:
todo va bien hasta que IdList contenga más de un Id.
El problema de "tiempo de espera" aparece si la lista contiene solo un Id. Para resolver el problema, use la condición if para verificar el número de identificadores en IdList.
Ejemplo:
Explicación:
Simplemente intente usar Sql Profiler y verifique la instrucción Select generada por Entity frameeork. ...
fuente