Domanda

Qual è il modo migliore per ottenere il comportamento inverso del tipo Booleano YesNo nella mappatura NHibernate?

Voglio che 'Y' significhi falso e 'N' significhi vero.

Esiste un tipo NoYes? Scrivi un tipo personalizzato? qualcosa di veramente facile?

Questo problema della necessità di invertire il booleano esiste su almeno un campo su oltre 40 tabelle. Tentativo di adattamento a un database legacy.

È stato utile?

Soluzione

Ho scoperto che gestire formati di dati strani nei database legacy può essere raggiunto facilmente implementando tipi personalizzati. Ad esempio, di recente ho creato un semplice tipo di utente per mappare DateTime su numeri a 8 cifre nel modulo yyyyMMdd , che è accaduto per essere il modo in cui le date sono state memorizzate in un dump DB2 Ho dovuto usare.

Los Techies ha un esempio sull'implementazione di IUserType che puoi utilizzare per risolvere il tuo problema: Mappatura di stringhe su booleani utilizzando IUserType di NHibernate .

Altri suggerimenti

Ho avuto un problema simile. La soluzione più semplice che ho trovato è stata estendere CharBooelanType da NHibernate e utilizzare il nuovo tipo sulla mappatura. Sarebbe così:

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

E la mappatura sarebbe così:

<property name="MyProperty" column="MyColumn" type="MyAssembly.MyNamespace.NewBoolType, MyAssembly" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top