Frage

Was ist der beste Weg, um das umgekehrte Verhalten des YesNo Booleschen Typs in NHibernate Mapping zu bekommen?

Ich will 'Y' falsch verstanden und 'N' bedeutet wahr.

Gibt es einen NeinJa Typen? Haben Sie einen benutzerdefinierten Typ schreiben? etwas einfach?

Dieses Problem benötigen, um die Booleschen bestehen auf mindestens ein Feld auf mehr als 40 Tabellen rückgängig zu machen. Der Versuch, eine Legacy-Datenbank anzupassen.

War es hilfreich?

Lösung

Ich habe festgestellt, dass mit seltsamen Datenformaten in Legacy Umgang Datenbanken leicht Typen durch die Implementierung von benutzerdefinierten erreicht werden kann. Zum Beispiel habe ich vor kurzem einen einfachen Benutzertyp DateTime bis 8 Ziffern auf dem Formular yyyyMMdd abzuzubilden, die die Art und Weise zu sein, geschahen die Daten in einem DB2-Dump gespeichert wurden ich musste.

Los Techies haben ein Beispiel auf IUserType Implementierung, die Sie Ihr Problem verwenden können, lösen: Mapping Strings zu Booleans mit NHibernate IUserType .

Andere Tipps

Ich hatte ein ähnliches Problem. Die einfachere Lösung, die ich fand, war die CharBooelanType von NHibernate erweitern und die neue Art auf dem Mapping verwenden. Es wäre wie folgt aus:

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

Und die Abbildung so sein würde:

<property name="MyProperty" column="MyColumn" type="MyAssembly.MyNamespace.NewBoolType, MyAssembly" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top