Почему EF6 LINQ не генерирует правильное значение "is null" SQL для сравнения нулевых строковых переменных? - PullRequest
1 голос
/ 20 февраля 2020

У нас есть приложение EF6 на основе EDMX, в котором мы хотели бы выполнить запрос LINQ, подобный этому.

string category = ... // comes from somewhere and equals to null
context.Product.Where(e => e.Category == category).ToArray();

Проблема, которую я вижу, состоит в том, что сгенерированный SQL содержит [table].[Category] = @p... в предложении where независимо от того, является ли переменная category null или нет. Таким образом, в конце дня запрос не возвращает результатов, если переменная null, вместо генерации правильных is null критериев и возврата правильных строк.

Я проверил с явным e => e.Category == null выражение и это генерирует is null, как и ожидалось.

Я также проверил EDMX и SQL, и соответствующий столбец Category действительно обнуляется в обоих местах, так что может не быть проблемой.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 20 февраля 2020

Попробуйте установить context.Configuration.UseDatabaseNullSemantics на false. Это свойство влияет на указанное поведение.

См. Документацию здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...