Вопрос:
Могу ли я заставить EF6 использовать VARCHAR вместо NVARCHAR в выражениях QUERY?
Одной из причин может быть производительность (я знаю, что это, вероятно, неподходящее место для рассмотрения производительности, см. отказ от ответственности). В базе данных, над которой я работаю, я заметил значительную разницу в производительности. когда я использовал VARCHAR вместо NVARCHAR.
Сценарий
У меня есть 40 000 идентификаторов в списке, и я использую их для запроса моей таблицы «Клиенты».
Код: Выделить всё
List ids = new[]{"Id1", "Id2" .. "Id40000"}.ToList();
var customers = dbContext.Customers.Where(c => ids.Contains(c.Id));
, а Customers.Id — строку.
Но это приводит к этой ошибке :
"SqlException: внутренняя ошибка: достигнут предел служб выражений. Найдите в запросе потенциально сложные выражения и попытайтесь упростить их".
https://learn.microsoft.com/en-us/sql/r ... rver-ver16
Когда я смотрю на сгенерированный SQL, я вижу, что EF установил все идентификаторы как NVARCHAR,
Код: Выделить всё
WHERE ([Project1].[C10] IN (N'Id1', N'Id2', N'Id3', ..... , N'Id40000')
Код: Выделить всё
WHERE ([Project1].[C10] IN ('Id1', 'Id2', 'Id3', ..... , 'Id40000')
Подробнее здесь: https://stackoverflow.com/questions/791 ... xpressions