В моем коде у меня есть следующий фрагмент запроса L2E:
where ol.ordhead.ohcustno == login && (ol.ollastdoctype == "IN") && ol.olstatus == "9"
Это переводит к следующему фрагменту SQL:
WHERE ([Extent8].[ohcustno] = @p__linq__1) AND (''IN'' = [Extent7].[ollastdoctype]) AND (''9'' = [Extent7].[olstatus]) ...
При определенном вводе запрос выполняется 3 секунды,Я изменяю запрос следующим образом:
where ol.ordhead.ohcustno == login && (ol.ollastdoctype == "IN" || ol.ollastdoctype == "CR") && ol.olstatus == "9"
, и в результате изменения SQL выглядят следующим образом:
WHERE ([Extent6].[ohcustno] = @p__linq__1) AND ([Extent5].[ollastdoctype] IN (N''IN'',N''CR'')) AND (''9'' = [Extent5].[olstatus]) ...
Обратите внимание, что по какой-то причудливой причине Entity Framework решила преобразовать мои IN и CRUnicode.В результате запрос теперь выполняется 6 секунд на том же входе.Если я вручную удаляю префикс N из предложения IN и повторно запускаю запрос в SSMS, время выполнения возвращается к 3 секундам.Это, конечно, потому что SQL Server Query Optimizer не может получить преимущество от индекса, потому что сравниваемые типы теперь различны (varchar против nvarchar)
Может кто-нибудь объяснить мне, почему Entity Framework внезапно решает преобразовать мои константыUnicode и как я могу избежать этого?