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?
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.
@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.
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.
Voici la dernière syntaxe pour .Net 4.5.
MyDbContext context = new MyDbContext();
context.Database.SetCommandTimeout(300);
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