Inhaltsverzeichnis

NHibernate-Konfiguration

NHibernate bietet eine Möglichkeit, mittels Life-Objects auf verschiedene Datenbanken zuzugreifen. Hierbei wird mittels Objekt (C# - oder VB - Klassenstruktur) die betreffende Tabelle, von der Daten abgeholt oder in die Daten geschrieben werden sollen, abgebildet. Das Zusammenführen der Tabellen Felder mit den Klassenfelder geschieht mittels NHibernate-HBM-XML-Mapping.
Folgende Dateien sind notwendig :

Life-Object-Klasse :

Objekt, welche die Tabellenstruktur abbildet, mit der Daten aus Datenbank abgeholt oder in Datenbank geschrieben werden.
In diesem Beispiel werden Artikeldaten in eine MS Access Datenbank geschrieben. Sollen Daten aus einer Datenbank gelesen werden, muss demensprechend die Load-Methode implementiert und verwendet werden. In der Kassendeklaration müssen die Schnittstellen IMapObjectRoot und IDbLifecycleangegeben sein.

konfiguration_nhibernate_klasse.jpg
konfiguration_nhibernate1.jpg

Hier ein weiteres Beispiel für eine Klassendeklaration. Dort werden Artikledaten aus einer Datenbank abgeholt, um daraus einen Artikelkatalog zusammen zu stellen. Daher sind die Methoden Save und Rollback nicht ausgefüllt. Für diesen Vorgan werden lediglich die Methode Load, um die Daten aus der Datenbank abzuholen und eine Objekt-Liste mit Artikeldaten zu erzeugen und die Methode Commit, um die abgeholten Datensätze zu kennzeichnen.
nhibernate_class2.jpg

NHibernate hbm.xml-Mapping :

Dieses Mapping verbindet die Felder im Objekt mit den Tabellen-Spalten der Ziel-Datenbank. Wichtig ist dass im Mapping-Namen hbm.xml wie im folgenden Beispiel (ArtikeldatenStructure.hbm.xml) gezeigt enthalten ist. Ebenso wichtig ist die Verwendung der NHibernate Datentypen im Datenbank-Objekt-Mapping. Diese sind in der linken Spalte aufgeführt. Auf kein Fall die .Net-Datentypen im Datenbank-Objekt-Mapping verwenden.nhibernate_datatypes1.jpg

konfiguration_nhibernate2.jpg

Häufig werden Daten aus einer Datenbank abgeholt, z.B. wenn Artikeldaten zu einem Artikelkatalog zusammengestellt werden sollen. Die abgeholten Datensätze werden in vielen Fällen durch einen Eintrag in eine eigens dafür vorgesehenen Spalte als abgeholt gekennzeichnet. In diesem Fall ist nur eine einzige Spalte betroffen. Meistens wird nach dem Abholen aller Datensätze für einen Artikelkatalog ein boolscher (Ja/Nein) oder alphanumerischer (J/N) Wert in die dafür vorgesehen Spalte geschrieben. Damit nicht alle Felder eines Datensatzes beim Update-Vorgang in die Datenbank zurückgeschrieben werden können auf Klassenebene folgende Paramener angegeben werden:

<class name=„jakoby.DBIntegration.ArtikelPositionen, ascii.jakoby“ table=„Artikelkatalog“ dynamic-update=„true“ dynamic-insert=„true“>

Hiermit wird die Möglichkeit genutzt, auf Feldebene einen Schalter zu verwenden, der es für jedes einzelne Feld erlaubt, den Update-Mechanismus ein und auszuschalten. Wird der Update-Parameter in einem Property (gemapptes Feld) folgendermaßen eingetragen:

<property name=„ArtikelBeschreibung“ type=„String“ access=„field“ column=„ArtikelBeschreibung“ update=„false“ />

Bei dieser Einstellung wird das Feld beim Update-Vorgang nicht berücksichtigt. Soll ein Feld berücksichtigt werden, muss nicht extra update=„true“ angegeben werden, da dies der Defaulteinstellung des NHibernate-Mapping-Properties entspricht.

Einfacher oder zusammengesezter Schlüssel (Primary Key)

Werden z. B. Artikledaten abgeholt, do werden die Records (ein Artikel-Datensatz) in eine Liste eingetragen. Da NHibernate die Art und Weise bestimmt, wie diese Liste befüllt wird, ist ein eindeutiger Primär- und Fremd- Schlüssel unerlässlich.nhibernate_singleprimarykey.jpg

nhibernate_composidekey.jpg

Wichtig ist, dass im id-Tag des NHibernate-Mappings eine Tabellen-Spalte enthalten ist, welche für jeden Datensatz unterschiedliche Werte enthält. Ist hingegen nur der Fremdschlüssel angegeben, wird die Liste mit der ersten Position befüllt, da dieser immer den selben Wert hat. Die Folge ist, dass die Positionen-Liste zwar die richtige Anzahl an Positionen enthält, aber alle Positionen die gleichen Daten enthalten, namlich die der ersten Position. Daher sollte man im id-Tag des Mappings entweder eine Tabellen-Spalte mit fortlaufender Nummer (Autoindex), oder einen eindeutigen zusammengesetzten Schlüssel aus mehreren Spalten wählen, damit auch alle Positionen des Dokuments in die Liste eingetragen werden, um später zur Verarbeitung zur Verfügung zu stehen.

hibernate.cfg.xml :

Beinhaltet die Datenbank- Art und -Connenction. Diese Datei sollte im eBiss-Verzeichnis enthalten sein. Das Beispiel unterhalb baut eine Verbindung zu einer Access-Datenbank auf.

konfiguration_nhibernate3.jpg

Das nächste Beispiel zeigt die Settings, um eine Verbindung über Odbc zu einen Microsoft SQL-Server herzustellen:

nhibernate_connection2.jpg

Im nächsten Beispiel sind die Parameter für eine native Connection zu einem MS SQL-Server angegeben:nhibernate_connection3.jpg

File Appender für Fehlerausgabe in Log :

Der FileAppender beinhaltet den Pfad zur Log4Net-Log-Datei. Dort werden die Fehlerausgaben von NHibernate geschrieben. Um diesen zu aktivieren muss eine Datei log4net.config.xml benannt werden und im eBiss-Verzeichnis abgelegt werden.

konfiguration_nhibernate4.jpg

Weitere Informationen finden Sie unter :