2012-01-23 22 views
36

Ho ricevuto un errore su una delle mie pagine che la query di linq è scaduta poiché richiede troppo tempo. Rende la pagina inutilizzabile.Timeout Linq-to-SQL

È una pagina di report a cui gli amministratori possono accedere solo una volta al giorno. È inevitabile tagliare questa query minimamente, deve solo ordinare molti dati.

Soluzioni per risolvere questo problema che ho letto sono aumentando la proprietà di timeout nel contesto dei dati, ma vorrei evitare di farlo perché cambierebbe per l'intero sito web.

C'è un modo per impostare un timeout più ampio per le singole pagine?

risposta

55

appena trovato la risposta a giocare con intellisense:

using (MainContext db = new MainContext()) 
{ 
    db.CommandTimeout = 3 * 60; // 3 Mins 
} 

In questo modo è possibile aumentare il tempo per una query su una base per query come dovrebbe modificare le stringhe di connessione o contesti di dati.

+3

Se si desidera impostare il timeout indefinito, impostarlo su zero. – vcRobe

4

La risposta di Tom Gullen è buona.

Un altro rispondente ha menzionato l'impostazione del timeout di connessione nella stringa di connessione.
Volevo fare attenzione che la proprietà timeout della connessione della stringa di connessione NON fosse il timeout del comando. È più ovvio quando ci pensi. È un errore comune.

+0

upvote per il chiarimento – Oxymoron

-1

Prima di aumentare un timeout SQL, vale sempre la pena valutare la strategia di indicizzazione. È raro, secondo la mia esperienza, che una query su una tabella e colonne ben indicizzate scadrebbe.

Des Owen

+1

Ciao, benvenuto in SO. Anche se questo è molto costruttivo, non è esattamente una risposta e dovrebbe essere un commento. Puoi commentare una volta guadagnata abbastanza reputazione. Saluti! – Cthulhu

10

@ Tom Gullens risposta non ha funzionato per me su EF6

ho dovuto drill-down per il database DbContext

Ecom.Database.CommandTimeout = 120;

Spero che questo consente di risparmiare tempo .

+5

linq-to-sql! = EF – djv