Ihr Problem mit EF 6-Abfrage-Timeouts trotz effizienter SQL in SSMS lässt auf Parameter-Sniffing schließen. Um dieses Problem zu beheben, berücksichtigen Sie Folgendes:
Kann EF den Hinweis „OPTION RECOMPILE“ einbetten?
Ja, EF 6 ermöglicht das Abfangen von SQL-Befehlen vor der Ausführung. Sie können den Hinweis „OPTION RECOMPILE“ hinzufügen, indem Sie einen IDbCommandInterceptor implementieren. Hier ist eine Beispielimplementierung:
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { public void AddQueryHint(IDbCommand command) { if (command.CommandType != CommandType.Text || !(command is SqlCommand)) return; if (command.CommandText.StartsWith("select", StringComparison.OrdinalIgnoreCase) && !command.CommandText.Contains("option(recompile)")) { command.CommandText = command.CommandText + " option(recompile)"; } } // Implementation of other interface methods... }
Um diesen Interceptor zu verwenden, fügen Sie ihn einfach zu Beginn Ihrer Anwendung hinzu:
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Weitere Überlegungen
Das obige ist der detaillierte Inhalt vonWie kann ich durch Parameter-Sniffing verursachte Zeitüberschreitungen bei EF 6-Abfragen beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!