Kob*_*bie 8 c# sql-server stored-procedures entity-framework
我有存储过程和实体框架的问题.
让我解释一下正在发生的事情......以及迄今为止我所尝试过的事情.
我有一个存储过程,它没有做太多
SELECT
COUNT(DISTINCT(EmailAddress)) AcceptedQuotes,
CONVERT (DATE,QuoteDate) QuoteDate
FROM
Quote Q
JOIN
Person P on Q.PersonPk = P.Pk
JOIN
Product Pr on Q.ProductPk = Pr.Pk
JOIN
Accepted A on Q.Pk = A.QuotePk
WHERE
QuoteDate between @startDate and @endDate
AND CompanyPk = @companyPk
AND FirstName != 'Test'
AND FirstName != 'test'
AND FirstName != 'EOH'
Run Code Online (Sandbox Code Playgroud)
我想执行此操作,它在SSMS中工作正常,甚至不需要1秒钟.
现在,我将其导入Entity Framework,它超时并将命令超时设置为120 ...
那么我到目前为止所尝试的以及我测试的内容.
如果我使用SqlCommand,SqlDataAdapter,DataTable方式,用我自己的连接字符串,它按预期执行.当我在这种情况下使用Entity Framework连接字符串时,它会超时.
我改变了我的存储过程以包含"重新编译"选项并尝试了SET ARITHABORT方法,没有运气,它在通过EF运行时超时.
这是EF中的一个错误吗?
我现在刚刚决定使用"旧学校"数据访问来重写它.
另请注意,EF对来自同一数据库的其他存储过程执行正常.
任何想法或帮助将不胜感激......
PS.我找到了这篇文章,但也没有帮助:(
这可能是由参数嗅探引起的
当编译或重新编译存储过程时,为该调用传递的参数值将被“嗅探”并用于基数估计。最终效果是计划得到优化,就好像这些特定参数值被用作查询中的文字一样。
- 使用不直接显示在参数上的虚拟变量也可以保证执行计划的稳定性,而不需要添加重新编译提示,示例如下:
创建过程 dbo.SearchProducts @Keyword varchar(100) As Declare @Keyworddummy as varchar(100) Set @Keyworddummy = @Keyword select * from Products where Keyword like @Keyworddummy
- 为了防止这种情况和其他类似情况,您可以使用以下查询选项:
优化重新编译
- 在批处理期间禁用自动更新统计信息
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |