Het probleem was een oud of onjuist queryplan voor mijn query.
Ik heb het probleem opgelost voor het verwijderen van de bestaande queryplannen voor deze query.
Met dank aan Vladimir Baranov voor het wijzen op sommarskog.se/query-plan-mysteries.html. Dank ook aan tschmit007 en annemartijn.
Ik moest de queryplannen voor mijn query in de database identificeren met behulp van de volgende query:
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%'
Dit is een licht gewijzigde versie van de vraag uit het artikel van sommarskog. Houd er rekening mee dat u uw eigen code in de like-instructies moet plaatsen om uw zoekopdracht te vinden. Deze query reageert met de attributenlijst en de planhandle voor elk queryplan voor mijn query.
Ik probeerde erachter te komen welk plan van SSMS kwam en welk van EF, dus ik heb ze allemaal verwijderd met behulp van de volgende syntaxis:
dbcc freeproccache([your plan handle here])
Het nieuwe plan gemaakt voor mijn EF-query werkte perfect. Blijkbaar hield het EF-plan er geen rekening mee dat ik recentelijk de statistieken over de database had bijgewerkt. Helaas weet ik niet hoe ik een sp_recompile moet doen voor een EF-query.