Im пытается получить набор записей с использованием EF 4.3.1. Мне нужно получить все те записи, которые имеют значение NULL в определенном столбце.Где используется «IS NULL»
Я проверил базу данных, и многие строки имеют нуль в этой колонке, а также столбца с нулевым значением. EF делает что-то странное. Глядя на profiler, он генерирует следующий SQL:
SELECT
CAST(NULL AS int) AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable1]
WHERE 1 = 0
Мои столбцы объекта объявлены как «int?».
Я попытался с помощью следующих conbinations, но я получаю тот же результат:
dbset.Where(e=>e.MyNullableInt == null).ToList();
dbset.Where(e=>e.MyNullableInt.Equals(null)).ToList();
Единственный способ, которым я могу передать это странное поведение, это загрузить полный набор, заполнить переменную и сделать где после этого шага , что очень непросто, так как он загружает все данные.
Любые идеи, как достичь этого ?.
UPDATE: Я нашел следующий билет в Codeplex относительно обнаруженной проблемы, которая затрагивает EF Версию предшествующего EF 5. http://entityframework.codeplex.com/workitem/178 Они предлагают использовать сравнение для обхода проблема, но в моем случае я не использую переменную, мне нужно фактически фильтровать, используя нуль. Кто-нибудь знает, как обходиться это? – Charles
Вы уверены, что определили отображение как NULL? У вас есть атрибут [Обязательный] в поле объекта? –
Да, фактически столбец является внешним ключом. Конфигурация объекта была выполнена с использованием свободного API. Я уже проверил, и в базе данных много строк с нулевыми значениями в этом столбце. Если вы получаете весь набор из EF, он возвращает null для тех строк, которые не имеют значений в этих столбцах, а id для тех строк, которые имеют. Проблема возникает, когда вы используете условие (x => x.id == null). Переход к последней версии EF сейчас не является вариантом, так как это потребует от меня проведения нескольких тестов во всем приложении. – Charles