Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在实体框架中控制参数嗅探和/或查询提示?_Sql Server_Entity Framework_Query Hints_Parameter Sniffing - Fatal编程技术网

Sql server 如何在实体框架中控制参数嗅探和/或查询提示?

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

更新:我建议在未来版本的EF中实现提示控制

我有一个问题,我的一个实体框架(EF)查询在Sql Server中执行需要很长时间,尽管当我将生成的TSQL复制并粘贴到Sql Server Management Studio(SSMS)中时,它运行得非常快。经过一些调查,我发现我遇到了一个参数嗅探问题,问题是插入许多查询提示中的一个(优化、重新编译等)。如何将这些提示插入EF查询


从不同角度提出的相关问题包括和。

如果您正在执行存储过程,则可以在内部声明存储过程的参数


这将停止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