Le problème était un plan de requête obsolète ou incorrect pour ma requête.
J'ai résolu le problème de suppression des plans de requête existants pour cette requête.
Merci à Vladimir Baranov de m'avoir indiqué sommarskog.se/query-plan-mysteries.html. Merci également à tschmit007 et annemartijn.
J'ai dû identifier les plans de requête pour ma requête dans la base de données à l'aide de la requête suivante :
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%'
Il s'agit d'une version légèrement modifiée de la requête de l'article de sommarskog. Notez que vous devez mettre votre propre code dans les déclarations similaires pour trouver votre requête. Cette requête répond avec la liste d'attributs et le descripteur de plan pour chaque plan de requête pour ma requête.
J'ai essayé de déterminer quel plan provenait de SSMS et lequel d'EF, alors je les ai tous supprimés, en utilisant la syntaxe suivante :
dbcc freeproccache([your plan handle here])
Le nouveau plan créé pour ma requête EF a parfaitement fonctionné. Apparemment, le plan EF n'a pas tenu compte du fait que j'avais récemment mis à jour les statistiques sur la base de données. Malheureusement, je ne sais pas comment faire un sp_recompile pour une requête EF.