HiLo - błąd NHibernate "error performing isolated work"

24 września 2009, 00:42

KomentarzeKomentarze: 0 KategorieKategorie: nhibernate

Od roku piszę projekty posługując się NHibernate. A tu dopiero mój pierwszy post o tym super narządku :) Post tym bardziej niefortunny, gdyż dotyczy błędu na jaki można się niechący natknąć i stracić dobrą godzinę na jego rozwiązanie.

NHibernate pozwala na definiowanie różnego typu generatory wartości klucza głównego. Oprócz generatorów natywnych, czyli wartości generowanych przez bazy danych są także takie jak: hilo, guid, guid.comb....

W swoich projektach wykorzystuję hilo, który generuje wartość typu int. W aplikacjach webowych lepiej wygląda taki int w URLu niż GUID. :) Standardowo NHibernate do wygenerowania wartości używa prostej, skromnej tabelki:

   1:  create table hibernate_unique_key (
   2:      next_hi INT 
   3:  )

Możemy także użyć własnej specjalnej tabeli do wygenerowywania wartości dla wybranych obiektów.

        <id name="ID" column="Id">
            <generator class="hilo">
                <param name="table">EntityIdentifiers</param>
                <param name="column">DocumentItemID</param>
                <param name="max_lo">10</param>
            </generator>           
        </id>

Dzięki temu mamy zdefiniowany dla naszego obiektu własny licznik generowanych wartości. Bardzo przydatne kiedy obiekt danego typu rotuje w aplikacji bardzo często.

Mój błąd pojawił się wtedy, gdy utworzyłem kolejny obiekt, który korzysta z tej tabeli i potrzebował kolejnej własnej kolumny. Utworzyłem ją, ale strzeliłem literówkę. Za żadne skarby nie wiedziałem co jest grane. NHibernate się zepsuł. :/

Dopiero po godzinie sprawdzania wszystkiego pokolei doszedłem do właściwej przyczyny błędu. Mało mówiący komunikat błędu zmylił mnie od samego poczatku. StackTrace zaprowadził mnie do generatorów, ale ja poprostu nie widziałem tej literówki. Teraz na takie przypadki piszę specjalne testy. :)

Jeśli spodobał Ci się ten artykuł, to podziel się tą informacją z innymi.

Nikt jeszcze nie skomentował tego artykułu. Bądź pierwszy.

Dodaj komentarz Dodaj komentarz

Twój email (niepublikowany/opcjonalnie):

Twoja strona (opcjonalnie):

Imię i nazwisko/nick (wymagane):

Treść (wymagane):

Chcę być poinformowany o kolejnych komentarzach:

Te pola zostaw puste

Uwaga! Zastrzegam sobie prawo do usuwania obraźliwych i wulgarnych komentarzy.