Ich greife mittels NHibernate und FluentNhibernate auf eine Legacy-Datenbank zu, die Datumswerte in separaten Tabellenspalten getrennt nach Tag Monat und Jahr als string verwaltet. Da sich Strings schlecht vergleichen lassen, möchte ich in meinen Entity-Klassen eine Property definieren, welche die Datumswerte als DateTime zurückliefert. Bei der Initialisierung des Mappings wirft FluentNHibernate eine Exception, weil es versucht meine transiente Property an eine Tabellenspalte zu binden. Gibt es eine Möglichkeit, FluentNHibernate zu sagen, dass es eine Proeprty nicht mappen soll?
AutoMapping bei Fluent NHibernate ist nur aktiv, wenn man es in der Konfiguration angibt. Wenn da nichts von AutoMapping auftaucht, ist auch kein AutoMap aktiv.
Dann hast du diese aber im Mapping stehen. FluentNHibernate mapped nur das, was du auch im ClassMap<T> angibst. Alles was dort nicht gemapped ist, landed auch nicht bei NHibernate selber.
Schau dir mal von NHibernate das Interface IUserType an. Damit kannst du direkt eigene Datentypen definieren. Hier könntest du jetzt also einen eigenen z.B. "MultiColumnDateTime" definieren, der es dir erlaubt in deinem Mappings nur eine DateTime-Property zu halten und NHibernate teilt dieses dann in drei Spalten für Jahr, Monat und Tag auf. Beim Einlesen dann wieder zurück in nur ein DateTime.
Ist um längen komfortabler als noch eine zusätzliche Property anzulegen.
Ich habe meine zusätzliche Property nicht in ClassMap<T> angegeben. Trotzdem bekomme ich eine Mapping Exception. Es sieht so aus, als ob hier das Automapping zuschlägt. Gibt es eine Möglichkeit, dies komplett auszuschalten?
Über die Definition eines eigenen IUserTypes habe ich mir auch schon Gedanken gemacht. Ich habe bis jetzt aber kein Beispiel gefunden, wie man einen Typ, der auf mehrere Tabellenspalten gemappt wird, via ClassMap<T> in FluentNHibernate definiert.
Danke für den Tipp. Mittlerweile habe ich festgestellt, dass mein Problem nicht beim Mapping liegt, sondern, dass ich meine transiente Property nicht in LINQ to NHibernate Abfragen verwenden kann.
Ich werde versuchen, einen ICompositeUserType zu definieren. Wenn ich es richtig verstehe, muss ich diesen Typ als Component mappen?