昨天我跟进了我的问题Entity Framework 6 get complext return value from a stored procedure。我的存储过程现在在实体框架下运行。但是,3分钟后超时,连接超时。实体框架 - 存储过程的执行时间非常长
我跑在我的SQL Server Management Studio中存储过程与线(省略客户信息):
EXEC spGetDupWOs @ProjectName=N'...', @City=N'...', @State=N'LA', @ProposalNum=N'201703080740-001', @County=N'...', @Owner=N'...', @QuoteRecipients=N'...', @ProjectID=-1
它执行在不到一秒钟。当实体框架执行它时,它需要永远。
使用SQL Server事件探查,我决定实体框架正在发送这一行到SQL服务器:
exec sp_executesql N'EXEC spGetDupWOs',N'@ProjectName nvarchar(19),@City nvarchar(6),@State nvarchar(2),@ProjectNum nvarchar(12),@County nvarchar(10),@Owner nvarchar(23),@QuoteRecipients nvarchar(23),@ProjectID bigint',@ProjectName=N'...',@City=N'Holden',@State=N'LA',@ProposalNum=N'201703080740-001',@County=N'Livingston',@Owner=N'...',@BID_RECIP=N'...',@ProjectID=-1
当我在SSMS运行它,它永远运行。
阅读类似的问题看起来像问题是参数嗅探和执行计划的变化。
这里是我的电话在我的应用程序执行存储过程:
List<DuplicateProposals> duplicateCheckResults =
db.Database.SqlQuery<DuplicateProposals>("spGetDupWOs",
spl.ToArray())
.ToList();
在线阅读一堆的文章后,我更糊涂了。我如何更改我的电话以解决此问题?
您是否尝试过修复参数嗅探场景? – DavidG
就是这样。我对读到的东西感到困惑,我不知道如何。我是否需要更改存储过程或我的应用程序调用? –
更改SP。例如:CREATE PROC Thing(@ param1 INT)AS DECLARE @ internal_param1 INT = @ param1; SELECT * FROM Table WHERE Column = @ internal_param1' – DavidG