Mein Befehl läuft ständig ab, daher muss ich den Standardwert für das Zeitlimit für Befehle ändern.
Ich habe gefunden myDb.Database.Connection.ConnectionTimeout
, aber es ist readonly
.
Wie kann ich das Befehlszeitlimit in Entity Framework 5 festlegen ?
Database.CommandTimeout
ist nicht mehr schreibgeschütztDatabase.Connection.ConnectionTimeout
. Wie auch immer, ich würde sagen, dass diesDatabase.CommandTimeout
das Richtige ist, wenn Ihre Abfrage eine Zeitüberschreitung aufweist (AusnahmeSystem.Data.Entity.Core.EntityCommandExecutionException
enthaltenSystem.Data.SqlClient.SqlException: Timeout expired.
).Antworten:
Versuchen Sie dies in Ihrem Kontext:
Wenn Sie das Zeitlimit in der Verbindungszeichenfolge definieren möchten, verwenden Sie den
Connection Timeout
Parameter wie in der folgenden Verbindungszeichenfolge:Quelle: Gewusst wie: Definieren Sie die Verbindungszeichenfolge
quelle
ObjectContext
in diesem Konstruktor auf die zuzugreifen. Manchmal schlagen die PowerShell / NuGet-Konsolenbefehle zirkulär fehl .Sie können verwenden
DbContext.Database.CommandTimeout = 180;
Es ist ziemlich einfach und keine Besetzung erforderlich.
quelle
Fluent API
Form von EF verwenden.Mein Teilkontext sieht aus wie:
Ich habe die
SetCommandTimeOut
Öffentlichkeit verlassen, sodass nur die Routinen, die ich für eine lange Zeit (mehr als 5 Minuten) benötige, anstelle einer globalen Zeitüberschreitung geändert werden.quelle
Im generierten Konstruktorcode sollte es aufrufen
OnContextCreated()
Ich habe diese Teilklasse hinzugefügt, um das Problem zu lösen:
quelle
Ich habe Ronnies Antwort mit einer fließenden Implementierung erweitert, damit Sie sie folgendermaßen verwenden können:
dm.Context.SetCommandTimeout(120).Database.SqlQuery...
quelle
Für die Datenbank zuerst Ansatz:
Wir können es weiterhin in einem Konstruktor festlegen , indem wir die ContextName.Context.tt T4-Vorlage folgendermaßen überschreiben :
Database.CommandTimeout = 180;
ist die akute Veränderung.Die generierte Ausgabe lautet wie folgt:
Wenn Sie Ihr Datenbankmodell ändern, bleibt diese Vorlage erhalten, die aktuelle Klasse wird jedoch aktualisiert.
quelle
System.Configuration.ConfigurationManager.AppSettings["keyname"]
@shasWie andere Antworten, jedoch als Erweiterungsmethode:
quelle
Ich bin gerade auf dieses Problem gestoßen und habe es durch Aktualisieren meiner Anwendungskonfigurationsdatei behoben. Geben Sie für die betreffende Verbindung "Verbindungszeitlimit = 60" an (ich verwende das Entity Framework Version 5.0.0.0).
ConnectionTimeout-Einstellung
quelle
Sie können dies einfach verwenden:
dbContext.Database.SetCommandTimeout(300);
quelle