Sql server 如何在实体框架中控制参数嗅探和/或查询提示?
更新:我建议在未来版本的EF中实现提示控制 我有一个问题,我的一个实体框架(EF)查询在Sql Server中执行需要很长时间,尽管当我将生成的TSQL复制并粘贴到Sql Server Management Studio(SSMS)中时,它运行得非常快。经过一些调查,我发现我遇到了一个参数嗅探问题,问题是插入许多查询提示中的一个(优化、重新编译等)。如何将这些提示插入EF查询Sql server 如何在实体框架中控制参数嗅探和/或查询提示?,sql-server,entity-framework,query-hints,parameter-sniffing,Sql Server,Entity Framework,Query Hints,Parameter Sniffing,更新:我建议在未来版本的EF中实现提示控制 我有一个问题,我的一个实体框架(EF)查询在Sql Server中执行需要很长时间,尽管当我将生成的TSQL复制并粘贴到Sql Server Management Studio(SSMS)中时,它运行得非常快。经过一些调查,我发现我遇到了一个参数嗅探问题,问题是插入许多查询提示中的一个(优化、重新编译等)。如何将这些提示插入EF查询 从不同角度提出的相关问题包括和。如果您正在执行存储过程,则可以在内部声明存储过程的参数 即 这将停止SQL Server
从不同角度提出的相关问题包括和。如果您正在执行存储过程,则可以在内部声明存储过程的参数 即
这将停止SQL Server缓存正在传递给SP的任何参数。若要对EF生成的查询应用提示,您应该使用计划指南,此处的详细信息:感谢您的回答,但不幸的是,我正在寻找一种向EF生成的查询中添加提示的方法,不是一个存储过程。我已经在谷歌上快速搜索了一下,对于你的EF问题没有什么明显的解决办法,其他的ORM比如NHibernate允许查询提示。下面这些帖子是我能找到的最接近你的问题的解决方案:有人有这方面的实际例子吗?你能解释一下你的情况吗?我很久以前就遇到过这个问题,最终的解决方案是围绕着它,而不是通过它。我提出了一个基于拦截器的不同解决方案,我相信,拦截器是EF中一个较新的功能(在您回答时可能不存在)。看:非常有趣,谢谢。
CREATE PROCEDURE sp_test
(
@param1 NVARCHAR(10),
@param2 INT
)
AS
DECLARE @internalParam1 NVARCHAR(10)
DECLARE @internalParam2 INT
SET @internalParam1 = @param1
SET @internalParam2 = @param2
-- REST OF YOUR QUERY
GO