Lutter contre les délais d'attente du cadre d'entité : un guide complet
Les requêtes Entity Framework (EF) sur de grands ensembles de données peuvent parfois dépasser le délai d'expiration par défaut, généralement 30 secondes. Même après avoir ajusté le CommandTimeout
de la chaîne de connexion, vous pourriez toujours rencontrer des problèmes. Cela vient souvent d'une mauvaise compréhension de la façon dont EF gère les délais d'attente.
Le piège des paramètres de chaîne de connexion
De nombreux développeurs pensent à tort que la définition de Default Command Timeout
dans la chaîne de connexion a un impact direct sur le comportement du délai d'attente d'EF. Cependant, cela est inefficace et constitue une limitation connue (voir bug ID 56806 : https://www.php.cn/link/91a448039265fc4a83f545a4945e37a3).
La solution : contrôle direct du délai d'attente
L'approche correcte consiste à gérer explicitement le délai d'attente au niveau du contexte EF. Cela garantit que le paramètre de délai d'attente s'applique à vos requêtes. L'implémentation varie légèrement en fonction de votre version EF :
Entity Framework Core 1.0 et versions ultérieures :
<code class="language-csharp">this.context.Database.SetCommandTimeout(180);</code>
Cadre d'entité 6 :
<code class="language-csharp">this.context.Database.CommandTimeout = 180;</code>
Cadre d'entité 5 :
<code class="language-csharp">((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;</code>
Entity Framework 4 et versions antérieures :
<code class="language-csharp">this.context.CommandTimeout = 180;</code>
En définissant CommandTimeout
sur une valeur telle que 180 secondes (ou une durée plus appropriée pour vos requêtes), vous contrôlez directement le temps d'exécution autorisé pour les opérations de base de données, empêchant ainsi les délais d'attente même avec des ensembles de données importants. N'oubliez pas d'ajuster cette valeur en fonction de vos besoins spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!