Ma commande continue d'expirer, je dois donc modifier la valeur de délai d'expiration de la commande par défaut.
J'ai trouvé myDb.Database.Connection.ConnectionTimeout
, mais c'est readonly
.
Comment puis-je définir le délai d'expiration de la commande dans Entity Framework 5 ?
Database.CommandTimeout
n'est plus en lecture seuleDatabase.Connection.ConnectionTimeout
. Quoi qu'il en soit, je dirais queDatabase.CommandTimeout
c'est la bonne chose dans le cas où votre requête est expirée (exceptionSystem.Data.Entity.Core.EntityCommandExecutionException
contenantSystem.Data.SqlClient.SqlException: Timeout expired.
).Réponses:
Essayez ceci dans votre contexte:
Si vous souhaitez définir le délai d'expiration dans la chaîne de connexion, utilisez le
Connection Timeout
paramètre comme dans la chaîne de connexion suivante:Source: Comment: définir la chaîne de connexion
la source
ObjectContext
dans ce constructeur, parfois les commandes de la console PowerShell / NuGet échouent de manière circulaire .Vous pouvez utiliser
DbContext.Database.CommandTimeout = 180;
C'est assez simple et aucun casting n'est requis.
la source
Fluent API
forme d'EF.Mon contexte partiel ressemble à:
J'ai laissé
SetCommandTimeOut
public donc seules les routines dont j'ai besoin pour prendre beaucoup de temps (plus de 5 minutes) que je modifie au lieu d'un timeout global.la source
Dans le code du constructeur généré, il doit appeler
OnContextCreated()
J'ai ajouté cette classe partielle pour résoudre le problème:
la source
J'ai étendu la réponse de Ronnie avec une implémentation fluide pour que vous puissiez l'utiliser comme ceci:
dm.Context.SetCommandTimeout(120).Database.SqlQuery...
la source
Pour la première approche de la base de données:
Nous pouvons toujours le définir dans un constructeur, en remplaçant le modèle ContextName.Context.tt T4 de cette façon:
Database.CommandTimeout = 180;
est le changement réel.La sortie générée est la suivante:
Si vous modifiez votre modèle de base de données, ce modèle reste, mais la classe actuelle sera mise à jour.
la source
System.Configuration.ConfigurationManager.AppSettings["keyname"]
@shasIdentique aux autres réponses, mais comme méthode d'extension:
la source
Je viens de rencontrer ce problème et je l'ai résolu en mettant à jour le fichier de configuration de mon application. Pour la connexion en question, spécifiez "Connection Timeout = 60" (j'utilise la version 5.0.0.0 du framework d'entité)
Paramètre ConnectionTimeout
la source
Vous pouvez utiliser ce simple:
dbContext.Database.SetCommandTimeout(300);
la source