Добро пожаловать Гость, вы находитесь: Вход

Изображение Flexberry Wiki



  • Продукт: Flexberry ORM
  • Компонент: Объект данных, Сервис данных
  • Программная библиотека: ICSSoft.STORMNET.DataObject.dll, ICSSoft.STORMNET.Business.dll
  • Предназначение: Описание особенностей интерпретации значения NULL в логическом типе и способы исправления такого поведения.




Особенности интерпретации булевского значения

Атрибут класса, объявленный с типом bool, в БД имеет тип bit и может иметь 3 значения:
  • 1, если явно записать в атрибут значение True;
  • 0, если явно записать в атрибут значение False;
  • NULL, если в него ничего не записывать.

NULL-значение имеет подводные камни: на интерфейсе пользователя такое значение отображается как False, т.е. галочка у пользователя выставлена не будет. Однако значение NULL не учитывается при запросах сервисом данных, если на него наложено ограничение.

Рассмотрим подробнее. Булевский атрибут называется Исполнено. Когда мы фильтруем по установленому признаку Исполнено, то ищутся все, у кого "Исполнено = 1", когда мы ищем, у кого признак не установлен, то ищется по признаку "НЕ (Исполнено = 1)", при этом значения NULL игнорируются (это нормальное поведение СУБД). Чтобы явно найти все, у кого признак не установлен, надо писать "НЕ (НЕПУСТО(Исполнено))".

В итоге противоречие: для пользователя в интерфейсе и в его сознании есть только 2 значения, в при фильтрации данных система работает с 3-мя.

Чтобы этого избежать, можно:
  • зашить обработку в технологию. При этом надо понимать, что есть системы, в которых используют все три состояния. Из жизни такие ситуации идут, как правило, из импортов, когда в БД попадает NULL осознанно.
  • самим в коде и в БД устанавливать значения по умолчанию, тем самым, исключая возможность необдуманного занесения значения NULL в БД Системы. И это является наиболее правильным способом, т.к всегда надо знать, что у тебя в объекте что означает.

Откуда ссылаются на эту страницу


Куда ссылается эта страница



На этой странице ещё нет сообщений. Ваше будет первым!

ScrewTurn Wiki version 3.0.5.600. Some of the icons created by FamFamFam.