Entity Framework Core – ‘Execution Timeout Expired. The Timeout Period Elapsed Prior To Completion Of The Operation Or The Server Is Not Responding’ Hatası ve Çözümü
Merhaba,
Entity Framework Core ORM aracı ile gönderilen ağır sorgularda işlem süresinin uzun olması olası olacağından dolayı isteğin zaman aşımına uğradığına ve sunucunun yanıt vermediğine dair aşağıdaki hatayla karşılaşabilirsiniz;
SqlException: Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
The wait operation timed out.
Hatanın görsel halinide ele alırsak eğer;

Hatanın Nedeni Nedir?
Hatanın nedeni verdiği mesajda aşikar olduğu gibi ağır ve maliyetli sorgunun süreci zaman aşımına uğratmasından kaynaklanmaktadır.
Hatanın Çözümü
Bu hatayı çözebilmek için yapmanız gereken zaman aşımı sürecini arttırmaktır. Bunun için aşağıdaki gibi context sınıfından veritabanı nesnesine erişerek SetCommandTimeout metodu aracılığıyla Time Out süresi ilgili sorguya eşlik edebilecek bir makul değerde uzatılabilir.
public class ArticleContext : DbContext
{
public ArticleContext(DbContextOptions options) : base(options)
{
this.Database.SetCommandTimeout(999999);
}
public DbSet<Article> Articles { get; set; }
public DbSet<Image> Images { get; set; }
public DbSet<HTMLTag> HtmlTags { get; set; }
}
Benzer mantıkla aynı işlemi, context nesnesini uygulamaya “AddDbContext” metodu ile dahil ederken aşağıdaki gibide “CommandTimeout” metodu üzerinden de gerçekleştirebilirsiniz;
app.AddDbContext<ArticleContext>(option =>
option.UseSqlServer("Server=.;Database=ArticleDB;Trusted_Connection=True;",
o => o.CommandTimeout(9999999)));
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

