Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

285
Views
La ejecución de SetCommandTimeout no funciona con EF Core 5 para PostgreSQL

Tengo un problema cuando SetCommandTimeout es como si el método no funcionara correctamente.

Uso PostgreSQL como base de datos, y para EntityFramework Core estoy usando Npgsql.EntityFrameworkCore.PostgreSQL con la versión 5.0.5.1

En el código, configuro el tiempo de espera para 1s como este context.Database.SetCommandTimeout(1); y configuré un cronómetro para verificar cuánto tiempo toma, pero los milisegundos transcurridos siempre regresan alrededor de 15000ms a 16000ms. por lo que SetCommandTimeout(1) claramente no funciona.

También intenté usar context.Database.SetCommandTimeout(TimeSpan.FromSeconds(1)); tampoco funciona.

Una cosa más, solo quiero establecer el tiempo de espera para una solicitud específica. Entonces, la otra Solicitud tendrá el tiempo de espera predeterminado.

Aquí está mi código:

 [Route("api/[controller]")] [ApiController] public class TestController : Controller { private readonly DatabaseContext context; public TestController(DatabaseContext context) { this.context = context; } [AllowAnonymous] [HttpGet] public async Task<IActionResult> Test() { var sw = Stopwatch.StartNew(); try { context.Database.SetCommandTimeout(1); var test = await context.Test.FirstOrDefaultAsync(); return Ok(); } catch (Exception) { return BadRequest(); } finally { sw.Stop(); var elapsed = sw.ElapsedMilliseconds; // always return around 15000ms to 16000ms } } }

así es como lo registro en Startup.Cs

 services.AddDbContext<DatabaseContext>(options => { options.UseNpgsql(ConnectionString); });

¿Me perdí algo?

Gracias por adelantado

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El tiempo de espera del comando es el tiempo que se permite ejecutar una consulta/comando en el servidor de la base de datos. El temporizador se inicia cuando el servidor de la base de datos recibe la solicitud. El tiempo de ida y vuelta de un extremo a otro puede ser mayor que el tiempo de espera del comando debido al rendimiento de la red u otras limitaciones, incluido el agotamiento de los recursos en su servidor web.

Tiempo de espera del comando: el tiempo de espera (en segundos) al intentar ejecutar un comando antes de finalizar el intento y generar un error. Fuente

over 4 years ago · Santiago Trujillo Report

0

Busqué en Google un poco y encontré problemas relacionados con esta biblioteca.


Según esta publicación del foro , parece que el problema proviene del código fuente y la configuración simplemente se ignora.

Intente configurar el tiempo de espera del comando dentro de la creación del contexto de la base de datos justo antes del uso.


Otro está en el repositorio de github .

La solución para esto es actualizar a la última versión de los controladores .


Otro de github .

La solución para esto es modificar la cadena de conexión durante la creación del contexto :

 if (!connectionString.Contains("CommandTimeout")) { connectionString += $";CommandTimeout=120"; }

EDITAR (después de que OP mencionó que quiere usarlo en una sola solicitud): recomendaría seguir el camino creando otro contexto de base de datos y modificando su cadena de conexión (como se indicó anteriormente). De esa manera, podrá ejecutar comandos de ejecución corta/larga. Sin embargo, esto trae otros problemas relacionados con el contexto de base de datos múltiple y la posible falta de coincidencia de datos. Necesita ser manejado con precaución.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!