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" />