Проблемът беше остарял или неправилен план за заявка за моята заявка.
Реших проблема с изтриването на съществуващите планове за заявка за тази заявка.
Благодаря на Владимир Баранов, че ме насочи към sommarskog.se/query-plan-mysteries.html. Благодаря също на tschmit007 и annemartijn.
Трябваше да идентифицирам плановете за заявка за моята заявка в базата данни, като използвам следната заявка:
SELECT qs.plan_handle, a.attrlist, est.dbid, text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) est
CROSS APPLY (SELECT epa.attribute + '=' + convert(nvarchar(127), epa.value) + ' '
FROM sys.dm_exec_plan_attributes(qs.plan_handle) epa
WHERE epa.is_cache_key = 1
ORDER BY epa.attribute
FOR XML PATH('')) AS a(attrlist)
WHERE est.text LIKE '%standardHourRate%' and est.text like '%q__7%'and est.text like '%Unit Overhead%'
AND est.text NOT LIKE '%sys.dm_exec_plan_attributes%'
Това е леко модифицирана версия на заявката от статията на sommarskog. Имайте предвид, че трябва да поставите свой собствен код в подобни изрази, за да намерите вашата заявка. Тази заявка отговаря със списъка с атрибути и манипулатора на плана за всеки план на заявка за моята заявка.
Опитах се да разбера кой план идва от SSMS и кой от EF, така че изтрих всички, използвайки следния синтаксис:
dbcc freeproccache([your plan handle here])
Новият план, създаден за моята EF заявка, работи перфектно. Очевидно планът на EF не взе предвид факта, че наскоро бях актуализирал статистиката на базата данни. За съжаление, не знам как да направя sp_recompile за EF заявка.