Przyczyn tego wyjątku można szukać w kilku miejscach. Miejsca w których można popełnić błędy podzieliłem na 4 obszary:
- App/web config
- Plik mapowania klasy na tabelę w bazie
- Tworzenie sesji
- Zapytania
1. App/web .config
W pliku tym ustawiamy podstawowe właściwości fabryki sesji. Jednym z ważniejszych parametrów jest ten, mówiący gdzie znajdują się mapowania klas do tabel:
Code:
Po wystąpieniu tego błędu sprawdzamy więc w/w plik i szukamy czy znajduje się tam linijka mówiąca w którym assembly znajdują się mapowania.
2. Plik mapowania klasy na tabelę w bazie
W tym pliku można popełnić szereg błędów:
Code:
Rzeczy które sprawdzamy:
- czy nazwa assembly jest na pewno poprawna
- czy namespace się zgadza
- czy w nazwie klasy nie popełniliśmy błędu
- czy we właściwościach pliku zaznaczyliśmy Build Action na Embedded Resource
3. Tworzenie sesji:
Code:
Tutaj także można popełnić niewinny błąd i przez pośpiech możemy zapomnieć o wywołaniu metody Configure przed stworzeniem obiektu fabryki sesji.
4. Zapytania
Jeżeli do tworzenia zapytań wykorzystujemy HQL, należy pamiętać że w zapytaniach używamy nazwy klasy a nie tak jak by się mogło wydawać - tabeli.
Code:
Wiele osób porzuca nHibernate z powodu problemów konfiguracyjnych. Po kilku dniach używania biblioteki można w łatwy sposób identyfikować miejsca gdzie potencjalnie popełniliśmy błąd. Aby ułatwić sobie pracę i przy okazji używać silnie typowanych danych można skorzystać z fluent nHibernate - ale o tym w osobnym poście.
Miło słyszeć, że NHibernate nie wymiera i zaczynasz się w niego zagłębiać - będę na pewno śledził Twoje przygody.
OdpowiedzUsuńDo zapytań polecam korzystać z QueryOver:
var productDescriptions = session.QueryOver().List();
W takim wypadku dużo trudniej o błąd w stringu.
Warto od razu wspomnieć jak np. filtrować i sortować:
var productDescriptions = session.QueryOver().Where(k=>k.ModifiedDatek.Description).Asc.List();
Dzięki takim mechanizmom kompilator dba o to, żebyśmy nie popełniali głupich błędów, a pisanie takich prostych zapytań to czysta przyjemność.
...Coś w poprzednim komentarzu powycinało mi kawałki kodu.
OdpowiedzUsuńJak tutaj wstawić poprawnie fragment tekstu w nawiasach trójkątnych?...
Nie wiem w jaki sposób to wklejać, żeby się dobrze formatowało. W wolnej chwili poszukam w ustawieniach.
Usuń