devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
4 minut

NHibernate – jak zacząć?


23.10.2009

Ostatnio miałem kolejne podejście do NHibernate. Tym razem zdecydowanie udane. W ciągu minionych kilku tygodni trzykrotnie prowadziłem też w “swoim środowisku” rozmowę na temat taki jak w poście – jak zacząć przygodę z NHibernate? Postanowiłem więc, że warto efekt takiej rozmowy opublikować szerszemu gronu.

1. Spróbuj

Stwierdzenie pierwsze: jeżeli kiedyś odbiłeś się od NH, jeżeli odrzucało cię XML-hell, jeżeli nienaturalny wydawał ci się sposób budowania zapytań, jeżeli nie łapałeś “o co chodzi” i dlaczego warto poświęcić trochę czasu na naukę NH – wiele z tego zmieniło się podczas ostatnich miesięcy. Zapomnij o niemiłych wspomnieniach i zacznij od zera, daj sobie i NH drugą szansę – będziesz naprawdę pozytywnie zaskoczony. Provider LINQ i mapowanie w C# to projekty, dzięki którym wg mnie NH dostało wielkiego pozytywnego kopa w kategorii “developer-friendly”.

2. Co wrzucić do referencji?

Na samym początku pojawia się dylemat: no dobra, ale co tak naprawdę muszę ściągnąć, co dodać do referencji żeby zacząć zabawę? Odpowiedzi poniżej:

  • NHibernate w wersji 2.1: NHibernate-2.1.0.GA-bin.zip; plik zawiera instrukcje txt odnośnie tego co trzeba dołączyć do projektu, ale dla leniwych: do referencji trzeba dodać NHibernate.dll oraz jedną z bibliotek umożliwiających “lazy loading”, twórcy NH założyli w domyślnej konfiguracji że użytkownik doda NHibernate.ByteCode.Castle.dll i nie widzę powodu aby robić inaczej
  • provider Linq 2 NHibernate w wersji 1.0: NHibernate.Linq-1.0.0.GA-bin.zip; tu z referencjami nie powinno być problemu gdyż całość to jedna dll :)
  • projekt Fluent NHibernate pozwalający na mapowanie w C#, mega-wypas: Fluent NHibernate 1.0RTM; referencja do FluentNHibernate.dll

3. Skąd czerpać wiedzę?

Często spotykam skargi, że o NHibernate jest materiałów jak na lekarstwo… Szczerze mówiąc to tego lekarstwa można by wyprodukować całkiem sporo. Kilka linków:

  • po pierwsze: oficjalna strona NHibernate to http://nhforge.org/, a nie pierwszy wynik z Google czyli https://www.hibernate.org/343.html; to faktycznie KIEDYŚ było oficjalne gniazdo NH, ale już nie jest
  • dokumentacja na oficjalnej stronie: http://nhforge.org/doc/nh/en/index.html, jest to właściwie cała książka i po prostu KOPALNIA wiedzy o NH; lektura obowiązkowa dla każdego nowicjusza, najlepiej od deski do deski; nie ma tam co prawda wzmianki o fluent-nh czy linq nh, bo projekty te powstały po napisaniu doca, ale i tak zawarte tam informacje po prostu TRZEBA znać
  • blog Ayende Rahien, jednego z głównych rozwijaczy NH (cały blog jest godny polecenia, ale w aktualnie omawianym kontekście: szczególnie wpisy traktujące o NHibernate)
  • cykl wpisów zatytułowanych The NHibernate FAQ – można to określić jako “demonstracja NH w praktyce z TDD”
  • oficjalna strona projektu Fluent NHibernate – tworzenie pierwszych najprostszych mapowań krok po kroku; zakres materiału dość niewielki, ale na początek bardzo przydatny
  • może to zabrzmi banalnie, ale… wujek Google posiada odpowiedzi na naprawdę masę pytań, chociaż często trzeba poszukać dokładnej niż jesteśmy do tego przyzwyczajeni; aha, polecam na koniec pytania doklejać instrukcję “-hibernate” co odfiltruje dyskusje dotyczące dżawowego pierwowzoru NH

UPDATE (26.10.2009): na blogu Ayende pojawiła się informacja, że wraz z Robem Conery rozpoczął publikowanie webcastów o NHibernate. Nic tylko oglądać! LINK

4. Po co?

To pytanie jest niczym zlepek słów: “Co robisz, Szczepanie?”; zawiera pytanie i odpowiedź jednocześnie. Zostawiam was z tym rebusem:).


Z pewnością nie jest to mój ostatni wpis dotyczący NHibernate i Fluent NHibernate. Kilkukrotnie straciłem dobre kilka godzin próbując zrobić coś, co okazywało się banalne. Innymi razy nad ranem docierało do mnie, że podchodzę do problemu z całkowicie złej strony. W jeszcze innych sytuacjach odpowiedzi w Google naprawdę nie było i jedynie zerknięcie w źródła Fluent NH i ich testy jednostkowe okazywało się ostatnią deską ratunku. Tak więc do następnego razu, a póki co – gorąco radzę zaprzyjaźnić się z NHibernate, choćby hobbystyczne, dla własnej satysfakcji.

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Notify of
wolan

Do powyższych przyda się także lektura http://www.manning.com/kuate/. Dotyczy co prawda NH 1.2, ale moim zdaniem warto.

bezieur
bezieur

Myślę, że zdecydowania warto zobaczyć http://www.summerofnhibernate.com/.

dario-g

Do zbioru linków dodałbym http://stackoverflow.com

adollphus
adollphus
ja
ja

A jakby tak w dwóch słowach, czemu NH jest lepszy od Entity Framework, lub odwrotnie, po co nam NH skoro jest EF?

procent

Nie bylo moim zamiarem porownywanie NH i EF – gdybym czul sie na silach to z pewnoscia bylby to temat na osobny (i pewnie dlugi) post.
Nie jestem doswiadczonym uzytkownikiem EF, więc naprawde dwa slowa:

1) POCO (w NH tak, w EF nie)
2) UPDATE (w NH tak jak byc powinno, w EF wydumanie)

Kiedys Szymon Pobiega wiecej napisal na ten dokladnie temat, polecam lekture posta: http://zine.net.pl/blogs/simon/archive/2009/05/28/to-o-rm-or-not-to-o-rm.aspx

Gutek

@procent

to tyczy starej wersji EF. w nowej poco juz jest, ale nie mam zielonego pojecia jak to dziala i czy warte jest zachodu. co do update to nie kumam :)

Gutek

procent

@Gutek
Tak jak napisalem, nie jestem superwyjadaczem EF, ale z tego co kojarze to trzeba podac wszystkie wartosci sprzed update oraz tego po update – wiec albo update staje sie dwukrotna wycieczka do bazy, albo jestesmy zmuszeni trzymac gdzies ‘orygnalna’ kopie obiektu. Ja robilem to tym drugim sposobem.

procent

Do zbioru linków: Ayende Rahien i Rob Conery wlasnie zaczeli publikowac serie screencastow o NH: http://tekpub.com/preview/nhibernate . Co jak co, ale to na pewno bedzie skarbnica wiedzy.

biz

W kwestii NH vs EF. Moim zdaniem zdecydowanie na korzyść NH przemawia dojrzałość tej technologii. Może kiedyś EF zagrozi NH, bo widać rozwój tej technologii.

P.S.
Co do mappingu w XML-u można się przyzwyczaić ;).

Moja książka

Facebook

Zobacz również