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.