NHibernate: простой способ обработки значений по умолчанию как нулевых (или наоборот) - PullRequest
1 голос
/ 23 июня 2010

Кто-нибудь знает о быстром способе использования NHibernate для вставки значений по умолчанию для типов значений как нулевых в базу данных?

Например:

public class Foo
{
    public int SomeProperty { get; set; }
}

По умолчанию int равно 0.Когда это входит в базу данных, я хотел бы, чтобы это вошло как нуль.Я знаю, что мог бы сделать это, изменив SomeProperty на обнуляемое int, но, возможно, есть другой способ?Я также знаю, что я мог бы сделать это с помощью IUserType, но существует ли простой способ создания пользовательского типа, который можно использовать для всех типов значений?

Ответы [ 2 ]

3 голосов
/ 23 июня 2010

Это не простой способ заставить 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), вы можете вместо этого заставить БД использовать ненулевое значение. Это действительно зависит от ситуации.

1 голос
/ 23 июня 2010

Вы можете использовать NHibernate архитектура событий и подключить прослушиватель, выполняющий преобразование при загрузке, сохранении или обновлении.

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