Das Problem war ein veralteter oder falscher Abfrageplan für meine Abfrage.
Ich habe das Problem zum Löschen der vorhandenen Abfragepläne für diese Abfrage gelöst.
Danke an Vladimir Baranov für den Verweis auf sommarskog.se/query-plan-mysteries.html. Danke auch an tschmit007 und annemartijn.
Ich musste die Abfragepläne für meine Abfrage in der Datenbank mithilfe der folgenden Abfrage identifizieren:
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%'
Dies ist eine leicht modifizierte Version der Abfrage aus Sommarskogs Artikel. Beachten Sie, dass Sie Ihren eigenen Code in die Like-Anweisungen einfügen müssen, um Ihre Abfrage zu finden. Diese Abfrage antwortet mit der Attributliste und dem Planhandle für jeden Abfrageplan für meine Abfrage.
Ich habe versucht herauszufinden, welcher Plan von SSMS und welcher von EF stammt, also habe ich alle mit der folgenden Syntax gelöscht:
dbcc freeproccache([your plan handle here])
Der neue Plan, der für meine EF-Abfrage erstellt wurde, funktionierte perfekt. Anscheinend hat der EF-Plan nicht berücksichtigt, dass ich kürzlich Statistiken in der Datenbank aktualisiert hatte. Leider weiß ich nicht, wie man ein sp_recompile für eine EF-Abfrage durchführt.