web-dev-qa-db-fra.com

Délai d'attente Linq-to-SQL

J'ai reçu une erreur sur l'une de mes pages indiquant que la requête linq a expiré car elle prend trop de temps. Cela rend la page inutilisable.

Il s'agit d'une page de rapports à laquelle les administrateurs ne peuvent accéder qu'une fois par jour. Il est inévitable de réduire cette requête, il suffit de trier beaucoup de données.

Les solutions pour résoudre ce problème que j'ai lues sont en augmentant la propriété de délai d'attente dans le contexte de données, mais j'aimerais éviter de le faire car cela changerait tout le site.

Est-il possible de définir un délai d’attente plus long pour des pages individuelles?

43
Tom Gullen

Je viens de trouver la réponse en jouant avec intellisense:

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

Voici comment vous pouvez augmenter le délai d'expiration d'une requête, requête par requête, afin de modifier les chaînes de connexion ou les contextes de données.

65
Tom Gullen

@Tom Gullens answer n'a pas fonctionné pour moi sur EF6

J'ai dû accéder à la base de données sur DbContext

Ecom.Database.CommandTimeout = 120;

J'espère que cela vous fait gagner du temps.

10
Matas Vaitkevicius

La réponse de Tom Gullen est bonne. 

Un autre répondant a mentionné la définition du délai de connexion dans la chaîne de connexion.
Je voulais avertir que la propriété de délai de connexion de la chaîne de connexion N'EST PAS le délai de commande. C'est plus évident quand on y pense. C'est une erreur commune. 

4
Larry Smith

Voici la dernière syntaxe pour .Net 4.5.

    MyDbContext context = new MyDbContext();
    context.Database.SetCommandTimeout(300);
0
ZaneDarken

Avant d'augmenter le délai d'attente SQL, il est toujours utile d'évaluer votre stratégie d'indexation. D'après mon expérience, il est rare qu'une requête sur une table bien indexée et des colonnes expire.

Des Owen

0
Des Owen