| 

.NET C# Java Javascript Exception

2
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?

Danke im Voraus für die Hilfe
Klaus
27.08.2011
luedi 1,9k 1 9
4 Antworten
2
Ich hatte mich geirrt. Du musst wenn ein ICompositeUserType verwenden. Dazu gibt es zu hauf Beispiele im Netz.

Z.B: http://stackoverflow.com/questions/6602178/mapping-a-bit-field-flagsattribute-to-multiple-columns-using-nhibernate

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.
29.08.2011
Khalid 490 2
1
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.
27.08.2011
Khalid 490 2
0
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.
29.08.2011
luedi 1,9k 1 9
0
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?
30.08.2011
luedi 1,9k 1 9
Siehe http://stackoverflow.com/questions/2362853/using-icompositeusertype-on-different-tables-with-different-column-names
Khalid 30.08.2011

Stelle deine .net-Frage jetzt!