Entity Framework-Timeout-Probleme und Lösungen für lang andauernde Vorgänge
In Entity Framework (EF) können lang andauernde Vorgänge, wie z. B. Funktionsimporte, manchmal zu Zeitüberschreitungen führen, die den standardmäßigen 30-Sekunden-Schwellenwert überschreiten. Um dieses Problem zu lösen, müssen Sie die richtige Konfigurationsmethode verstehen.
Behebung des standardmäßigen Befehls-Timeout-Problems
Eine Möglichkeit besteht darin, die Verbindungszeichenfolge in der App.Config-Datei zu ändern und „Default Command Timeout=300000“ hinzuzufügen. Wie das Beispiel zeigt, funktioniert diese Methode jedoch nicht. Stattdessen muss CommandTimeout direkt in der Repository-Klasse festgelegt werden:
<code class="language-csharp">public IEnumerable<trekmatches> GetKirksFriends() { this.context.CommandTimeout = 180; return this.context.GetKirksFriends(); }</code>
Dadurch wird sichergestellt, dass Timeouts speziell für relevante Vorgänge festgelegt werden.
Zeitüberschreitungseinstellungen für Verbindungszeichenfolgen überschreiben
Es ist wichtig zu beachten, dass die Angabe eines Standard-Befehls-Timeouts in der Verbindungszeichenfolge zu Konflikten mit einem manuell festgelegten CommandTimeout im Repository führen kann. Um dieses Problem zu vermeiden, entfernen Sie die Timeout-Einstellung aus der Verbindungszeichenfolge.
Bug- und Entity Framework-Version
Es gibt einen bekannten EF-Fehler bei der Angabe des Standardbefehls-Timeouts in der Verbindungszeichenfolge. Dieser Fehler kann behoben werden, indem das Zeitlimit direkt für das Datenkontextobjekt festgelegt wird. Die Syntax variiert je nach verwendeter EF-Version:
Entity Framework Core 1.0:
<code class="language-csharp">this.context.Database.SetCommandTimeout(180);</code>
Entity Framework 6:
<code class="language-csharp">this.context.Database.CommandTimeout = 180;</code>
Entity Framework 5:
<code class="language-csharp">((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;</code>
Entity Framework 4 und niedriger:
<code class="language-csharp">this.context.CommandTimeout = 180;</code>
Durch die Implementierung dieser Einstellungen können Sie das Problem des EF-Timeouts bei lang laufenden Vorgängen effektiv lösen.
Das obige ist der detaillierte Inhalt vonWie können Entity Framework-Zeitüberschreitungen bei lang laufenden Vorgängen effektiv behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!