Zastanawiam się nad wykonaniem własnej implementacji IUnitOfWork
dla warstwy trwałości NHibernate.Czy w ramach jednej sesji w nhibernate można wykonać wiele transakcji? I czy to zły pomysł?
Wygląda na to, że właściwym sposobem jest utworzenie egzemplarza ISession
i ITransaction
w konstruktorze, a następnie umieszczenie w destruktorze lub metodzie Dispose()
.
Oczywiście, jeśli ktoś wywołuje metodę Save()
, wówczas ISession
będzie zaczerwieniona i ITransaction
byłaby kompletna, więc po wywołaniu Save()
, nie byłby ważny otwarty transakcji Save()
znowu ... chyba że popełnione pierwsza transakcja i natychmiast otworzyła kolejną, nową transakcję. Ale czy to dobry pomysł?
Z punktu widzenia projektowania, ma sens wykonanie jednej operacji zatwierdzenia, ale niekoniecznie będę mieć kontrolę nad kodem, a inni programiści mogą być mniej zdyscyplinowani w związku ze wzorem UnitOfWork.
Czy mogę stracić/zyskać cokolwiek, starając się, aby UnitOfWork był odporny na wiele transakcji na sesję? Czy powinienem po prostu sprawdzić otwartą transakcję i wyrzucić wyjątek, jeśli został już zatwierdzony, zamiast dokonywać nowej transakcji?
Web lub aplikacja na pulpicie? – Phill
Jest przeznaczony do aplikacji internetowej. –