Это не простой способ заставить NHibe преобразовать 0 в ноль и наоборот, но альтернативное предложение (может быть, а может и не прямо в вашей ситуации).
Imo, использование значения по умолчанию для обозначения нуля является антипаттерном; может быть, вы согласны. Насколько я понимаю, вы пытаетесь соединить некоторый унаследованный код с надлежащей базой данных; это правильно?
Если вы управляете бизнес-классом, который вы отображаете (класс Foo), тогда я рекомендую выставить для использования в будущем версию SomeProperty с нулевым значением:
public class Foo
{
/// for new code, and for mapping to the database:
public int? SomeProperty_new {get;set;}
/// for legacy code only. Eventually, refactor legacy code to use SomeProperty_new instead, and just remove this needless property.
[Obsolete("This uses default value to mean null. Use SomeProperty_new instead.")]
public int SomeProperty_old
{
get
{
if (SomeProperty_new == null)
return 0;
else
return SomeProperty_new;
}
set { /* convert from 0 to null if necessary and set to SomeProperty_new.*/ }
}
}
Вам понадобятся лучшие имена, чем SomeProperty_new и SomeProperty_old.
С другой стороны, если 0 никогда не является допустимым значением (за исключением значения null), вы можете вместо этого заставить БД использовать ненулевое значение. Это действительно зависит от ситуации.