NHibernate - przegląd
W tym rozdziale omówimy, czym jest NHibernate, na jakich platformach można go zaimplementować, jakie są jego zalety i inne aspekty z nim związane.
Co to jest NHibernate?
NHibernate jest dojrzałym narzędziem mapowania obiektowo-relacyjnym typu open source dla platformy .NET. Jest aktywnie rozwijany, w pełni funkcjonalny i używany w tysiącach udanych projektów. Jest zbudowany na szczycieADO.NET a aktualna wersja to NHibernate 4.0.4.
- NHibernate to obiektowo-relacyjny program do mapowania .NET typu open source, który jest rozpowszechniany w ramach GNU Lesser General Public License. 
- Oparty jest na Hibernate, popularnym mapowaniu obiektowo-relacyjnym Java i ma bardzo dojrzałą i aktywną bazę kodu. 
- Zapewnia strukturę do mapowania zorientowanego obiektowo modelu domeny na tradycyjną relacyjną bazę danych. 
- NHibernate został założony przez Tom Barrett a ten projekt istnieje od lutego 2003 roku, co było ich pierwszym zobowiązaniem. 
- To duży projekt i zapewnia dużą funkcjonalność. 
- Tam jest NuGet package dostępne, co bardzo ułatwia dodawanie do projektu. 
Dlaczego NHibernate?
Teraz pytanie brzmi, dlaczego potrzebujemy object-relational mappers? Dzieje się tak, ponieważ istnieje rozłączenie między światem przedmiotowym a światem relacji.
- W świecie przedmiotów wszystko jest wokół objects; nazwaliśmy obiektami te rzeczy, które mają nasze dane. 
- Świat relacyjny jest w całości oparty na zbiorach i mamy do czynienia z tabelami i wierszami, które są inne niż świat obiektów. 
- W świecie przedmiotów mamy unidirectional associations. Jeśli klient ma wskaźnik do zamówienia, niekoniecznie oznacza to, że zamówienie ma wskaźnik z powrotem do klienta, może lub nie. 
- W świecie relacji istnieją wszystkie skojarzenia bidirectional i można to zrobić za pomocą klucza obcego. 
- Wszystkie asocjacje są z natury dwukierunkowe, więc kiedy mamy do czynienia z mapowaniem obiektowo-relacyjnym, musimy również poradzić sobie z tym rozłączeniem. 
- W świecie obiektów pracujemy ze wskaźnikami, które są jednokierunkowe, podczas gdy w świecie relacyjnym mamy klucze obce, które są z natury dwukierunkowe. 
- Świat przedmiotów ma to pojęcie dziedziczenia, w którym pojazd może mieć wiele różnych podklas, więc samochód jest typem pojazdu, łódź jest typem pojazdu, a samochód sportowy jest typem samochodu, te typy relacje spadkowe. 
- Świat relacji nie ma pojęcia dziedziczenia. 
Mapowanie
Jak więc mapujemy to wszystko disjoint relationships?Ta koncepcja mapowania pochodzi z mapowania relacyjno-obiektowego. Należy zrozumieć głównie trzy rzeczy, jak pokazano na poniższym diagramie.
 
                - W swojej aplikacji będziesz potrzebować definicji klas, które są zwykle kodem C # i jego kodem .NET, który reprezentuje nasze klasy, na przykład klasa pracownika, klasa klienta, klasa zamówienia itp. 
- Na dole widać schemat bazy danych, czyli nasz Data Definition Language w relacyjnej bazie danych, która określa, jak wygląda tabela klientów, jak wygląda tabela pracowników. 
- Pomiędzy nimi mamy metadane mapowania, które mówią programowi mapowania relacyjno-obiektowego, jak tłumaczyć ze świata obiektów w języku C # do świata bazy danych w zakresie wierszy i kolumn oraz relacji kluczy obcych. 
- Te metadane mapowania można przedstawić na wiele różnych sposobów, a my przyjrzymy się kilku z tych najbardziej typowych w zastosowaniu NHibernate. 
- Jest reprezentowany przez HBM (Hibernate Mapping) pliki, które są plikami XML. 
Obsługiwana baza danych
NHibernate obsługuje wiele różnych baz danych. NHibernate ma dostęp do każdej istniejącej relacyjnej bazy danych.
- Serwer SQL to podstawowa obsługiwana baza danych, z której korzysta większość programistów podczas programowania, prawdopodobnie jest to najpopularniejsza. 
- To też works very well with Oracle. 
- Obsługuje również DB2, Firebird, MySQL, PostgreSQL, SQL Lite 
- To także ma ODBC and OLEDB drivers.