Вопрос

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

Я хочу, чтобы "Y" означало false, а "N" - true.

Есть ли люди типа Нойеса?Вы пишете пользовательский тип?что-нибудь действительно простое?

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

Это было полезно?

Решение

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

У технарей Лос-Анджелеса есть пример по внедрению 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" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top