尽管 SSMS 中的 SQL 高效,但您的 EF 6 查询超时问题建议参数嗅探。要解决此问题,请考虑以下事项:
EF 可以嵌入“OPTION RECOMPILE”提示吗?
是的,EF 6 允许在执行之前拦截 SQL 命令。您可以通过实现 IDbCommandInterceptor 添加“OPTION RECOMPILE”提示。下面是一个示例实现:
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... }
要使用此拦截器,只需在开始时将其添加到您的应用程序中即可:
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
更多注意事项
以上是如何解决参数嗅探导致的 EF 6 查询超时?的详细内容。更多信息请关注PHP中文网其他相关文章!