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.