24 września 2009, 00:42 dario Komentarze (0)

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

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:

create table hibernate_unique_key (
    next_hi INT 
)

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. :)

Tagi:

NHibernate

Komentarze zablokowane

O autorze

Dariusz Gil - projektant i programista aplikacji internetowych budowanych na platformie Microsoft w technologii ASP.NET (C#) oraz MS SQL Server. Obecnie właściciel (narazie :)) jednoosobowej firmy Softio.

Filtruj używając APML