Пустое значение каркаса сущности в запросе - PullRequest
5 голосов
/ 21 августа 2011

Я вижу странное поведение в запросе EF и мне интересно, почему это происходит. С помощью следующего кода я не получаю никаких результатов:

if (category.Parent == null)
{
    return Db.EventCategories.Where(c => c.Parent == category.Parent);
}

Но с этим кодом он возвращает ожидаемые результаты:

if (category.Parent == null)
{
    return Db.EventCategories.Where(c => c.Parent == null);
}

Какая разница? Разве ноль не всегда ноль? или EF рассматривает их как разные элементы, когда значение имеет значение NULL (Parent имеет тип int?).

Ответы [ 2 ]

2 голосов
/ 21 августа 2011

Я не уверен на 100%, но я думаю, что первый оператор генерирует что-то вроде SELECT ... FROM category, eventcategories WHERE category.parent = eventcategories.parent (который возвращает пустой набор записей, если category.parent равен нулю), тогда как второй ... WHERE eventcategories.parent IS NULL.

0 голосов
/ 09 июля 2014

Подробное объяснение см. В этой статье: Обработка значений NULL в Entity Framework . Помните, что EF 5.0, 6.0 и 6.1 по-разному обрабатывают обнуляемые значения. В EF 5.0 вам нужно будет вручную проверять наличие нулей; сравнение уравнений между двумя переменными по умолчанию не проверяет наличие нулей. Вы также можете вручную включить свойство UseCSharpNullComparisonBehavior в DbContext.ContextOptions , чтобы добиться того же эффекта. В EF 6.0 нулевое сравнение включено по умолчанию, но, вероятно, чрезмерно агрессивно и даже для столбцов, не допускающих значения NULL, что приводит к снижению производительности. Предполагается, что EF 6.1 настроил алгоритм так, чтобы тестировать нули только при необходимости.

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