C# 运行存储过程时实体框架问题
我对存储过程和实体框架有问题 让我解释一下发生了什么。。。以及我迄今为止所做的尝试 我有一个存储过程,它不会做很多事情C# 运行存储过程时实体框架问题,c#,sql-server,entity-framework,stored-procedures,C#,Sql Server,Entity Framework,Stored Procedures,我对存储过程和实体框架有问题 让我解释一下发生了什么。。。以及我迄今为止所做的尝试 我有一个存储过程,它不会做很多事情 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
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'
我想执行这个,它在SSMS中运行良好,甚至不需要1秒
现在,我将它导入实体框架,它超时,我将命令超时设置为120
好的,那么到目前为止我已经尝试了什么,我已经测试了什么
如果我使用SqlCommand
,SqlDataAdapter
,DataTable
方式,并使用自己的连接字符串,它将按预期执行。当我在这个场景中使用实体框架连接字符串时,它会超时
我修改了我的存储过程以包含“重新编译”选项,还尝试了设置ARITHABORT
方式,运气不好,当运行EF时超时
这是EF中的错误吗
我现在刚刚决定使用“旧式”数据访问重写这个
还请注意,EF与来自同一数据库的其他存储过程一起执行良好
任何想法或帮助都将不胜感激
附:我找到了这篇文章,但也没有帮助:(
这可能是由以下原因引起的
当编译或重新编译存储过程时,为该调用传递的参数值将被“嗅探”并用于基数估计。最终的效果是,计划得到了优化,就像那些特定的参数值在查询中被用作文本一样
您是否可以尝试更简单的查询,而不使用任何where cluase,如select TOP 1,并查看是否得到结果。您可以发布用于执行此查询的代码吗?此外,尝试使用sql server profiler查看引擎盖下发生的情况。也许您在EF情况下传递了错误的参数值?嗯,我运行了探查器,EF正在杀死数据库服务器。CPU 30123,读取1364453什么该死的,这被更改为不使用带参数的where子句,并且只选择top 10。您可以发布从sql profiler捕获的查询吗?嗨,好的,所以我创建了一个控制台应用程序,其中包含edmx文件,可以与存储的进程配合使用。当我使用edmx fil引用assemly时我甚至在另一个控制台应用程序中引用了有效的控制台应用程序…它死了。exec[dbo]。[spPartnerContacts]@startDate='2013-05-01 00:00:00',@endDate='2015-05-07 12:58:22',@companyPk=12我想可能是参数嗅探或过时的统计数据。