Это, вероятно, зависит от того, как вы хотите, чтобы ваш класс Poco вы действовали.
Во-первых, если вы загружаете нулевое значение, хотите ли вы, чтобы нулевое значение было повторно сохранено, или вы хотите, чтобы какой-либо сеансовый коммит / сброс обновлял запись новым значением по умолчанию для пустого поля.
Если вы хотите сохранить нулевое значение в БД, как вы будете определять из вашего объекта poco только логическое значение, значение которого для сохранения логических значений IE имеет только значения true / false, но ваш битовый класс имеет значения / значения null, 0 и 1?
Если сказать: вы хотите, чтобы ваши биты со значением NULL в качестве логического значения, а не NULL в логическом типе данных в вашем классе Poco, и класс обновили БД, чтобы удалить все нули, а затем одно решение, которое довольно быстро, без погружения в пользовательские типы должен иметь два свойства, одно обнуляемое и защищенное или внутреннее, и одно свойство в интерфейсе (без какого-либо отображения) с базовой логикой - из соображений зависимости все классы poco в идеале должны иметь один или два интерфейса:
EG
internal virtual bool? isActive {get;set;}
public bool MyInterface.IsActive
{
get{ return isActive ?? false; }
set{ isActive == value ?? false; };
}
Таким образом, ваша логика содержится в коде, поэтому, если правила становятся более сложными / сложными, или один обнуляемый бит имеет значение по умолчанию false, а другой имеет значение по умолчанию true (из-за какого-то безумного разработчика из прошлого века), вам будет проще контролировать преобразования.
Это потребует от вас работы с интерфейсами, а не с настоящими классами poco, но, опять же, это не плохо, это просто зависит от вашей модели разработки.