Fluent NHibernate – NHibernate bez XML

Przy okazji wpisu o konfiguracji NHibernate i PostgreSQL stwierdziłem, że tradycyjny sposób mapowania modelu za pomocą plików XML jest mniej wygodny niż ten używany w Entity Framework. Narzędziem, które ma usprawnić korzystanie z NHibernate jest Fluent NHibernate. Zobaczmy jak nasz przykład będzie wyglądał przy użyciu Fluent NHibernate.

Fluent Nhibernate daje możliwość stworzenia bazy na podstawie modelu z czego skorzystamy w tym przykładzie.

Tworzymy aplikację

Podobnie jak w poprzednich przykładach zaczynamy od stworzenia aplikacji konsolowej:

  1. Otwórz Visual Studio
  2. Wybierz File -> New -> Project…
  3. Wybierz Console Application
  4. Nazwij projekt
  5. Wciśnij OK

Instalujemy przy pomocy NuGeta potrzebne pakiety, czyli Fluent NHibernate i Npgsql:

  1. Wybierz Tools -> Library Package Manager -> Manage NuGet Packages for Solution…
  2. Wyszukaj Fluent NHibernate
  3. Zaznacz na liście znalezionych
  4. Wciśnij Install

Powtórz te kroki dla Npgsql.

Tworzymy model

Tworzymy klasy Author i Book:

Mapowanie modelu

NHibernate mapował model przy użyciu plików XML, Fluent NHibernate pozwala nam zastąpić pliki XML zwykłym kodem.

Klasa, która definiuje mapowanie musi rozszerzać klasę ClassMap<T> a jej konstruktor musi zawierać definicję mapowania. Tworzymy więc odpowiednie klasy AuthorMap i BookMap:

Konfiguracja i tworzenie bazy na podstawie modelu

Konfiguracja NHibernate była zapisana w pliku XML, Fluent NHibernate pozwala nam stworzyć konfigurację z poziomu kodu.

W pliku app.config zdefiniujmy connectionString do bazy danych. Dodaj poniższy kod do pliku app.config w obrębie elementu configuration:

W klasie Program stwórzmy sobie funkcję, która stworzy konfigurację i stworzy bazę danych na podstawie modelu:

 

Linia 4 definiujemy bazę danych.

Linie 6-7 pobieramy z pliku app.config connection string o nazwie ORMTest

Linia 8 ustawia w konfiguracji wyświetlanie zapytań SQL na konsoli.

Linia 9 konfiguracja mapowania.

Linia 10 tworzenie bazy na podstawie modelu.

Linia 11 tworzenie session factory.

Sposób użycia

W funkcji Main() za pomocą naszej funkcji pomocniczej Configure() tworzymy session factory. Mając session factory reszta kodu wygląda dokładnie tak samo jak w przykładzie z NHibernate, czyli:

Gotowe 🙂

Kod źródłowy do tego przykładu jest do pobrania tutaj.

Podsumowanie, czyli Fluent NHibernate vs. NHibernate

Różnicą między Fluent NHibernate a NHibernate jest możliwość użycia kodu do zapisania tego co w NHibernate było zapisane w plikach XML. Zyskujemy dzięki temu kontrolę nazw i typów, czyli wszelkie rozbieżności zostaną wykryte na etapie kompilacji. Umożliwia też łatwiejszy refactoring.


Comments are closed.