Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

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;
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ü

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ü

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…

Bunlar da hoşunuza gidebilir...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir