J'obtiens des délais d'expiration en utilisant Entity Framework (EF) lorsque j'utilise une fonction d'importation qui prend plus de 30 secondes pour se terminer. J'ai essayé ce qui suit et je n'ai pas pu résoudre ce problème:
J'ai ajouté Default Command Timeout=300000
à la chaîne de connexion dans le fichier 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 se terminer? Cela ne se produit que pour les très grands ensembles de données. Tout fonctionne bien avec de 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 commande. Voir l'exception interne pour plus de détails. ---> System.Data.SqlClient.SqlException: le délai a expiré. Le délai d'expiration s'est écoulé avant la fin de l'opération ou le serveur ne répond pas.
OK - je l'ai fait 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 défini sur 180. Lorsque j'ai supprimé le Default Command Timeout
de la chaîne de connexion, cela a fonctionné. 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, la définition des paramètres de délai d'attente dans la chaîne de connexion n'a aucun effet.
"
dans la chaîne.
NONCLUSTERED
index à certaines tables, cela a résolu le problème de délai d'attente pour nous.