NHibernate Типы данных - Логическое значение Нойеса
-
03-07-2019 - |
Вопрос
Каков наилучший способ получить обратное поведение логического типа 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" />