NHibernate DataTypes - NoYes Boolean - PullRequest
       9

NHibernate DataTypes - NoYes Boolean

1 голос
/ 03 марта 2009

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 03 марта 2009

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

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

1 голос
/ 13 февраля 2012

У меня была похожая проблема. Более простое решение, которое я нашел, это расширить 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" />
...