NHibernate DataTypes - NoYes Boolean

Каков наилучший способ получить обратное поведение булевого типа YesNo в отображении NHibernate?

Я хочу, чтобы "Y" означало "ложь", а "N" - "истина".

Есть ли тип NoYes? Вы пишете нестандартный тип? что-то действительно простое?

Эта проблема необходимости обращения логического значения существует по крайней мере в одном поле в более чем 40 таблицах. Попытка адаптироваться к устаревшей базе данных.

2 ответа

Решение

Я обнаружил, что работа со странными форматами данных в устаревших базах данных может быть легко достигнута путем реализации пользовательских типов. Например, я недавно сделал простой тип пользователя для сопоставления DateTime до 8 цифр в форме yyyyMMddЭто было способом хранения дат в дампе DB2, который мне пришлось использовать.

У Los Techies есть пример реализации IUserType что вы можете использовать для решения вашей проблемы: Отображение строк в логическое значение с помощью IUserType NHibernate.

У меня была похожая проблема. Более простое решение, которое я нашел, - это расширение CharBooelanType из NHibernate и использование нового типа в отображении. Было бы так:

using NHibernate.Type;
using NHibernate.SqlTypes;

namespace MyAssembly.MyNamespace 
{
    public class NewBoolType : CharBooleanType 
    {
        public NewBoolType()
            : base(new AnsiStringFixedLengthSqlType(1)) { }

        protected override string TrueString 
        {
            get { return "N"; }
        }

        protected override string FalseString 
        {
            get { return "Y"; }
        }

        public override string Name 
        {
            get { return "inverted_bool"; }
        }
    }
}

И отображение будет таким:

<property name="MyProperty" column="MyColumn" type="MyAssembly.MyNamespace.NewBoolType, MyAssembly" />
Другие вопросы по тегам