EF6 использует VARCHAR вместо NVARCHAR в выражениях QUERY.C#

Место общения программистов C#
Ответить
Anonymous
 EF6 использует VARCHAR вместо NVARCHAR в выражениях QUERY.

Сообщение Anonymous »

У меня в списке 40 000 идентификаторов, и я использую их для запроса таблицы «Клиенты».

Код: Выделить всё

List ids = new[]{"Id1", "Id2" .. "Id40000"}.ToList();
var customers = dbContext.Customers.Where(c => ids.Contains(c.Id));
Столбец Id в таблице SQL имеет вид VARCHAR(50)
, а Customers.Id — строку.
Но это приводит к этой ошибке :

"SqlException: внутренняя ошибка: достигнут предел служб выражений. Найдите в запросе потенциально сложные выражения и попытайтесь упростить их".

https://learn.microsoft.com/en-us/sql/r ... ase-engine -error?view=sql-server-ver16
Когда я смотрю на сгенерированный SQL, я вижу, что EF установил все идентификаторы как NVARCHAR,

Код: Выделить всё

WHERE ([Project1].[C10] IN (N'Id1', N'Id2', N'Id3', ..... , N'Id40000')
Если я установлю их как VARCHAR и запущу запрос непосредственно к базе данных, проблем не будет.

Код: Выделить всё

WHERE ([Project1].[C10] IN ('Id1', 'Id2', 'Id3', ..... , 'Id40000')
Итак, мой вопрос: как я могу заставить EF использовать VARCHAR в выражении?

Подробнее здесь: https://stackoverflow.com/questions/791 ... xpressions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»