J'obtiens des délais d'attente en utilisant Entity Framework (EF) lors de l'utilisation d'une importation de fonction qui prend plus de 30 secondes pour se terminer. J'ai essayé ce qui suit et je n'ai pas réussi à résoudre ce problème :
J'ai ajouté Default Command Timeout=300000
à la chaîne de connexion dans le App.Config dans le projet qui a le fichier EDMX comme suggéré ici .
Voici à quoi ressemble ma chaîne de connexion :
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
J'ai essayé de définir le CommandTimeout dans mon référentiel directement comme ceci :
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
Que puis-je faire d'autre pour empêcher l'EF de tomber en panne ? Cela ne se produit que pour les très grands ensembles de données. Tout fonctionne bien avec les petits ensembles de données.
Voici l'une des erreurs que je reçois :
System.Data.EntityCommandExecutionException : Une erreur s'est produite lors de l'exécution de la définition de la commande. Voir l'exception interne pour plus de détails. ---> System.Data.SqlClient.SqlException : Timeout expired. Le délai d'attente s'est écoulé avant l'achèvement de l'opération ou le serveur ne répond pas.
OK - J'ai réussi à le faire fonctionner et c'est idiot ce qui s'est passé. J'avais à la fois la chaîne de connexion avec Default Command Timeout=300000
et le CommandTimeout fixé à 180. Lorsque j'ai retiré le Default Command Timeout
de la chaîne de connexion, ça a marché. La réponse est donc de définir manuellement le CommandTimeout dans votre référentiel sur votre objet de contexte comme suit :
this.context.CommandTimeout = 180;
Apparemment, le paramétrage du délai d'attente dans la chaîne de connexion n'a aucun effet.
0 votes
Supprimer " de la chaîne de connexion
0 votes
Se référer également à ceci stackoverflow.com/questions/4396833/sql-exception-with-net-4-ef
5 votes
@hamlin11 Dans une chaîne de connexion EF, cela est nécessaire pour définir quelle partie est une chaîne de connexion et quelle partie est une métadonnée EF. Laissez
"
dans la chaîne.2 votes
Avant d'augmenter le délai d'attente, je vous suggère d'enquêter d'abord sur la raison de ce problème. Dans notre cas, nous nous sommes rendu compte que nous devions ajouter
NONCLUSTERED
à certaines des tables, ce qui a résolu le problème de délai d'attente pour nous.0 votes
Je travaille avec l'assistance de MS sur un problème de dépassement de délai de SQL, lorsque la base de données est hébergée dans SQL Azure. On m'a dit que tous les services PaaS Azure (sites Web PaaS et SQL Azure, etc.) disposent d'un délai d'attente universel de 230 secondes, qui a toujours la priorité, même si vous définissez un délai d'attente manuellement. Il s'agit de protéger les ressources de l'infrastructure PaaS à locataires multiples.