2012-01-23 19 views
36

Otrzymałem błąd na jednej z moich stron, że zapytanie linq upłynęło, ponieważ trwa zbyt długo. Powoduje, że strona nie nadaje się do użytku.Limit czasu Linq-SQL:

Jest to strona raportów dostępna tylko dla administratorów około raz dziennie. Jest nieuniknione, aby przyciąć tę kwerendę w ogóle, po prostu musi sortować wiele danych.

Rozwiązania, aby to naprawić Przeczytałem, zwiększając właściwość timeout w kontekście danych, ale chciałbym tego uniknąć, ponieważ spowodowałoby to zmianę całej witryny.

Czy istnieje sposób na ustawienie większego limitu czasu dla poszczególnych stron?

Odpowiedz

55

Wystarczy znaleźć odpowiedź grając z intellisense:

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

W ten sposób można zwiększyć limit czasu dla kwerendy na kwerendę na podstawie jak powinien modyfikując ciągów połączenia lub kontekstów danych.

+3

Jeśli chcesz ustawić czas nieokreślony, ustaw go na zero. – vcRobe

4

Odpowiedź Toma Gullena jest dobra.

Inny respondent wspomniał o ustawieniu limitu czasu połączenia w łańcuchu połączenia.
Chciałem ostrzec, że właściwość timeout połączenia ciąg połączenia NIE jest limit czasu polecenia. To bardziej oczywiste, kiedy o tym myślisz. To powszechny błąd.

+0

awans do wyjaśnienia – Oxymoron

-1

Przed zwiększeniem limitu czasu SQL zawsze warto przeanalizować strategię indeksowania. Z mojego doświadczenia wynika, że ​​zapytanie dotyczące dobrze indeksowanej tabeli i kolumn skończyłoby się.

Des Owen

+1

Witam, witam w SO. Nawet jeśli jest to bardzo konstruktywne, nie jest to dokładnie odpowiedź i powinien być komentarzem. Możesz komentować, gdy zdobędziesz wystarczającą reputację. Twoje zdrowie! – Cthulhu

10

@Tom Gullens odpowiedź nie działa dla mnie na EF6

musiałem przechodzić do bazy danych na DbContext

Ecom.Database.CommandTimeout = 120;

nadzieję, że to zaoszczędzić trochę czasu .

+5

linq-to-sql! = EF – djv