Dzisiaj kolejny krótki wpis, ponownie dotyczący NHibernate'a. Jak pewnie zdążyliście zauważyć jest to coś co ostatnio sprawia mi najwięcej problemów. Próbując pobrać rekordy przy pomocy zwykłego selecta zawężonego o kryteria w NHibernate, otrzymałem zaskakujący błąd "Cannot update a parent row: a foreign key constraint fails"
Bazy danych i XML 4767 dni, 10 godzin, 30 minut temu 55 źrodło rozwiń
Swojego czasu Ayende na blogu opisał dwa interfejsy, który umożliwiają w NH zrobienie prostego audytu. Interfejsy (IPreUpdateEventListener i IPreInsertEventListener) umożliwiają wstrzyknięcie pewnej operacji tuż przed wstawieniem jak i aktualizacją obiektu – idealne miejsce dla wstawienia daty aktualizacji i modyfikacji.
Architektura 4944 dni, 19 godzin, 30 minut temu 114 źrodło rozwiń
Autor: Dość dawno już temu pokazałem jak można użyć Automapper do mapowania kolekcji bez powodowania ciągnięcia ich zawartości z bazy: "AutoMapper, NHibernate, lazy loading oraz problem select n+1". Dzisiaj wrócę na chwilę do tematu Automappera i NH.
Bazy danych i XML 4985 dni, 6 godzin, 45 minut temu 163 źrodło rozwiń
NHibernate posiada zmienną show_sql, której ustawienie na "true" powoduje wypluwanie na konsolę wszystkich SQLi idących do bazy. Zachciało mi się pewnego dnia podpiąć po prostu debuggerem pod aplikację i zobaczyć te SQLe w Visualu, w okienku Output. Była to aplikacja web - więc konsoli brak. Trial na nhprof akurat się skończył:), więc w danej minucie również niewiele można było na to poradzić.
W aplikacji którą piszemy musimy zapisywać dane wprowadzone przez użytkownika na formularzu do bazy. Dane można podzielić na ogólne statyczne (adres, opis, itp.) i szczegółowe dynamiczne (lista monitorowanych parametrów i ich wyniki z możliwością dodawania/usuwania/modyfikowania każdego z parametrów wraz z wynikami ze wszystkim dostępnych list). To co biznes interesuje to jedynie dane ogólne zaś dane dynamiczne mogą ulegać notorycznym zmianom, ich śledzenie jest zbędne. Dlatego też by nie męczyć się z m...
Architektura 5014 dni, 6 godzin, 16 minut temu 160 źrodło rozwiń
W drugiej części ćwiczeń zaprezentuję bardziej skomplikowane zapytania Criteria API w NHibernate. Jako materiał treningowy, podobnie jak to było w pierwszej części, posłużą mi wcześniej opisywane statystyki. Metodyka pozostaje bez zmian - na początku T-SQL, później NH. Rozumiem, że może to budzić wątpliwości (zwłaszcza u obiektowych ortodoksów), jednak jak to w praktycznych zastosowaniach NH bywa, prędzej czy później trzeba zerknąć do środka zapytań i pobrudzić się trochę T-SQLem. Posunę się nawet do stw...
Dzisiaj coś z pogranicza horroru (będzie strasznie), sci-fi (będzie niesamowicie) i kina familijnego (będzie happy end). Czyli dlaczego warto używać transakcji NHibernate przy każdym wywołaniu metody Save(). Zaczęło się od prac nad statystykami. Po sporządzeniu planu wykonania 7 rodzajów statystyk przystąpiłem do realizacji pierwszych punktów. Zacząłem od napisania testów oraz repozytoriów do pobierania danych z bazy w celu wyliczenia statystyk. Metodyka pisania testów metod pobierających dane z bazy był...
Bazy danych i XML 5197 dni, 4 godziny, 33 minuty temu 161 źrodło rozwiń
Od pewnego czasu stałem przed problemem synchronizacji danych znajdujących się w bazie danych i danych pobranych ze strony Sejmu. Założyłem sobie, że za każdym razem, przy imporcie danych będę pobierał i przetwarzał wszystkie dane ze strony Sejmu dla określonej kadencji, porównywał z tym co już mam w bazie danych i zapisywał tylko dane, które pojawiły się na stronie od czasu ostatniego importu. Wynikiem tych założeń były dwa obiekty kadencji (grafy obiektów), które trzeba ze sobą porównać, a różnicę zap...
To ostatni, przynajmniej na razie post o NHibernate. Jest on podsumowaniem wszystkich moich wysiłków w kierunku poznania podstaw tego ORMa. Wcześniejsze etapy prac przedstawiłem w postach o mapowaniach NHibernate'a oraz zarządzaniu sesjami. Zmiany w klasie SessionManager W porównaniu do klasy przedstawionej w poprzednim poście musiałem wprowadzić niewielkie zmiany. Zdecydowałem się jednak zrobić ją klasą statyczną oraz przeniosłem funkcję MakeTransaction do głównej klasy dostępu do danych, oto jej a...
Bazy danych i XML 5220 dni, 18 godzin, 17 minut temu 141 źrodło rozwiń
Sesje w NHibernate są kluczowymi obiektami, spośród wszystkich klas NHibernate'a to właśnie do nich najczęściej się odwołujemy. Od tworzenia i zwalniania sesji zależy prawidłowe działanie programu. Dlatego też istotne jest, aby odpowiednio wszystko poukładać, a jeszcze dobrze by było, aby korzystanie z NHibernate'a nie straciło przez to na wygodzie.
Bazy danych i XML 5220 dni, 18 godzin, 17 minut temu 136 źrodło rozwiń
Autor: Po całym tygodniu szarpanego walczenia z NHibernate'm zdecydowałem się zrobić wstępny projekt bazy danych i odpowiednio go zmapować do wykorzystania w aplikacji. Model bazy Na początek zakładam nie dużą ilość informacji do przechowywania w bazie, dlatego też jej model nie może być bardzo skomplikowany. Graficzna reprezentacja modelu została stworzona w programie MySQL Workbench (nie wiem czy robiłem coś źle, czy też provider System.Data.SQLite nie działa jeszcze zbyt dobrze jeśli chodzi o twor...
Bazy danych i XML 5224 dni, 16 godzin, 48 minut temu 132 źrodło rozwiń
Oglądając screencasty z Summer Of NHibernate, zacząłem poznawanie NHibernate'a i chciałem wypróbować świeżo zdobytą wiedzę w praktyce, jednak po drodze natrafiłem na kilka trudności i problemów. Dlatego też w tym poście chciałbym napisać jak sobie to wszystko poukładałem, żeby działało tak jakbym sobie tego życzył. SQLiteNa początek trzeba zaopatrzyć się w dotnetowego wrappera na bibliotekę SQLite (pobranie i zainstalowanie samej biblioteki uważam za krok oczywisty i nie wymagający komentarza). W moim pr...
Autor: Dziś postanowiłem troszeczkę opisać bardzo uproszczony model logiki związanej ścisłe z forum czyli encje takie jak Kategoria forum, Forum, Temat, Post. Oprócz tego opisze parę kosmetycznych. Logika związana z forum Forum będzie składało się z kategorii. Dzielą one całe forum na części związane ze sobą tematycznie. Każda kategoria możne posiadać wiele forów. W skład forów wchodzą tematy które zaś maja wiele postów. Aktualnie modele są bardzo pros...
Bazy danych i XML 5227 dni, 6 godzin, 22 minuty temu 91 źrodło rozwiń
Dzisiaj kilka słów na temat testowania kodu wykorzystującego NHibernate/Fluent NHibernate. Po stworzeniu modelu, mapowań Fluent NHibernate i wygenerowaniu bazy danych czas sprawdzić, czy ma to szansę działać. Będę testował kod mapowań, ale nic nie stoi na przeszkodzie, żeby wykorzystać ten sam kod (tworzenie sesji i budowanie schematu bazy danych) później, przy testowaniu kodu obiektów typu DAO/Repository (wykorzystujących ISession i/lub IStatelessSession z NHibernate). Żeby przeprowadzić testy będę potr...
Bazy danych i XML 5231 dni, 10 godzin, 6 minut temu 65 źrodło rozwiń
Autor: Chciałbym napisać dziś słów kilka o WCF RIA Services. Dokładnego przeglądu standardowych scenariuszy wersji pierwszej finalnej dokonałem niejako publikując zaktualizowane przykłady w dwóch częściach (patrz cz.I i cz.II). I chociaż jest tam wiele fajnych funkcjonalności, to dziś napiszę o trochę mniej standardowych, rzadziej spotykanych rzeczach. Mam tu na myśli takie zagadnienia jak korzystanie z NHibernate, MVVM (jest to typowe podejście dla Silverlight, ale nie zawsze przykłady czy prezentacje...
Programowanie rozproszone 5244 dni, 23 godziny, 46 minut temu 216 źrodło rozwiń
Na projekcie dyplomowym piszę projekt w Silverlight, który korzysta z NHibernate. Podstawą przy używaniu tej technologii są pliki o rozszerzeniu *.hbm.xml, które mapują tabele z bazy danych na obiekty, które są z kolei opisywane w plikach *.cs. Każda para tych dwóch plików mapuje jedną tabele z bazy danych. Przykładowe pliki mogą wyglądać tak...
Zastrzeżenie: może poniższe wypociny to wcale nie Model-View-Presenter a Model-View-Controller, może MVC: Passive View a może MVC: Supervising Controller a może MVP: Ostatnia Krew. Szczerze: I don't give a damn. (no... nie do końca; polecam artykuły Fowlera w sekcji Presentation Patterns jako bardzo ciekawą lekturę, ale zbytnie rozwodzenie się nad włożeniem danej implementacji do prawidłowej szufladki uważam za lekki przerost formy nad treścią) Niniejszy post zakłada, że Czytelnik jest zaznajomiony ...
Architektura 5344 dni, 3 godziny, 20 minut temu 109 źrodło rozwiń
Próba zapisania obiektu naruszającego więzy integralności przy użyciu biblioteki NHibernate spowoduje wygenerowanie wyjątku GenericADOException. Dopiero sięgając do wartości właściwości InnerException możemy przekonać się, co jest przyczyną niepowodzenia. Istnieje jednak sposób na zastąpienie standardowego wyjątku własnym.
Bazy danych i XML 5398 dni, 4 godziny, 9 minut temu 58 źrodło rozwiń
Autor:Dziś chciałbym podzielić się z Wami moimi refleksjami na temat sposobu zarządzania transakcjami w NHibernate, ze szczególnym uwzględnieniem nietrywialnego przypadku, kiedy w ramach jednej transakcji wykorzystujemy zarówno NHibernate, jak i NServiceBus. Posłużę się w tym celu kodem DDDSample.Net.
Ayende pisze ostatnio na swoim blogu o przykładowej apllikacji w WPF używającej NHibernate o nazwie Effectus. Kod całej aplikacji można znaleźć na githubie. Moją uwagę zwrócił kod Bootstrappera, który zawiera ciekawy trick, a mianowicie serializowanie obiektu Configuration do pliku.
Bazy danych i XML 5468 dni, 20 godzin, 7 minut temu 109 źrodło rozwiń