Ricevo timeout utilizzando Entity Framework (EF) quando si utilizza un'importazione di funzione che richiede più di 30 secondi per essere completata. Ho provato quanto segue e non sono stato in grado di risolvere questo problema:
Ho aggiunto Default Command Timeout=300000
alla stringa di connessione nel file App.Config nel progetto che ha il file EDMX come suggerito qui .
Ecco come appare la mia stringa di connessione:
<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" />
Ho provato a impostare CommandTimeout nel mio repository direttamente in questo modo:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
Cos'altro posso fare per evitare il timeout dell'EF? Questo accade solo per set di dati molto grandi. Tutto funziona bene con piccoli set di dati.
Ecco uno degli errori che sto riscontrando:
System.Data.EntityCommandExecutionException: si è verificato un errore durante l'esecuzione della definizione del comando. Vedere l'eccezione interna per i dettagli. ---> System.Data.SqlClient.SqlException: Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde.
OK - Ho funzionato ed è sciocco quello che è successo. Avevo Default Command Timeout=300000
impostato sia la stringa di connessione che CommandTimeout su 180. Quando ho rimosso la Default Command Timeout
stringa di connessione, ha funzionato. Quindi la risposta è impostare manualmente CommandTimeout nel repository sull'oggetto contestuale in questo modo:
this.context.CommandTimeout = 180;
Apparentemente l'impostazione delle impostazioni di timeout nella stringa di connessione non ha alcun effetto su di essa.
"
nella stringa.
NONCLUSTERED
indici ad alcune tabelle, questo ha risolto il problema del timeout per noi.