Pregunta

¿Cuál es la mejor forma de obtener el comportamiento inverso del tipo YesNo Boolean en el mapeo NHibernate?

Quiero que 'Y' signifique falso y 'N' que signifique true.

¿Hay un tipo NoYes? ¿Escribes un tipo personalizado? ¿Algo realmente fácil?

Este problema de la necesidad de invertir el booleano existe en al menos un campo en más de 40 tablas. Tratando de adaptarse a una base de datos heredada.

¿Fue útil?

Solución

He encontrado que tratar con formatos de datos extraños en bases de datos heredadas se puede lograr fácilmente mediante la implementación de tipos personalizados. Por ejemplo, recientemente hice un tipo de usuario simple para asignar DateTime a números de 8 dígitos en el formulario yyyyMMdd , que resultó ser la forma en que se almacenaron las fechas en un volcado de DB2 Tuve que usar.

Los Techies tienen un ejemplo sobre la implementación de IUserType que puede usar para resolver su problema: Mapeo de cadenas a Booleans usando el IUserType de NHibernate .

Otros consejos

Tuve un problema similar. La solución más sencilla que encontré fue extender el CharBooelanType desde NHibernate y usar el nuevo tipo en el mapeo. Sería así:

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"; }
        }
    }
}

Y la asignación sería así:

<property name="MyProperty" column="MyColumn" type="MyAssembly.MyNamespace.NewBoolType, MyAssembly" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top