Команда выбора в Servicestack. Orml - это разница в 4.0.54 и 4.0.56, когда я профилирую - PullRequest
0 голосов
/ 02 октября 2018

При профилировании одной и той же команды выбора:

4.0.50:

SELECT "CustomerID", "CustomerCode", "CustomerName"
FROM "dbo"."Customer"
WHERE "CustomerCode" In ('871110000','864483025')

4.0.56:

exec sp_executesql N'SELECT "CustomerID", "CustomerCode", "CustomerName" 
FROM "Customer"
WHERE "CustomerCode" In (@0,@1)',N'@0 nvarchar(max) ,@1 nvarchar(max) ',@0=N'871110000',@1=N'864483025'

Почему SS имеет это изменение?

Мой CustomerCode - это поле Varchar, но сгенерированная команда - Nvarchar, поэтому я не использую мой индекс, поэтому команда работает очень медленно.

Как это исправить?

Спасибо!

1 Ответ

0 голосов
/ 04 октября 2018

Я не могу найти способ установить типы параметров IN, поэтому мы выберем ядерную опцию.

Если вы все еще используете 4.0.56, вы можете добавить следующую строку в ваше приложениезапуск.

OrmLiteConfig.UseParameterizeSqlExpressions = false;

Это заставит ORMLite использовать «старый» способ создания SQL-запросов с параметрами (как это было до 4.0.54).Обратите внимание, что это свойство устарело, поэтому, если вы обновили ORMLite, вам придется определить, существует ли оно по-прежнему.

...