2010-12-29 10 views
6

Potrzebuję porady dotyczącej zarządzania sesją NHibernate dla aplikacji WinForm C#.Doradztwo w zakresie zarządzania sesjami NHibernate

Aktualnie przesyłam aplikację, aby korzystać z NHibernate. Używam również wzorca UnitOfWork, jak opisano w linku poniżej;

http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx

Moje pytanie odnosi się do sesji.

  1. Czy możesz mieć tylko jedną sesję działającą na jeden wątek przez cały czas?

  2. Mam scenariusz, w którym sesja (UnitOfWork) mogą być otwarte dla postaci przedstawionej w zgłoszeniu, ale użytkownik otwiera inną formę (tj Narzędzia - Opcje), które chciałbym mieć własną UnitOfWork. Oczywiście w tym przypadku bardziej sensownym byłoby otwieranie kolejnej sesji dla formularza "Narzędzia - Opcje" i nie używanie obecnie otwartej sesji dla podstawowej formy.

  3. Czy możemy mieć Słownik Sesji w jednym wątku?

Wszelkie porady dotyczące zarządzania sesją są mile widziane.

Odpowiedz

3

1 - Możesz mieć tyle sesji, ile wymaga Twój przypadek użycia.

2 - To dobrze, na podstawie 1.

3 - Można umieścić zmiennych sesji w słowniku lub innej kolekcji.

Czego nie należy robić, chyba że naprawdę wiesz co robisz i dlaczego:

  • użyć tej samej sesji w więcej niż jednym wątku
  • podmioty przechodzą z jednej sesji/UOW do drugiego
  • próba ponownego użycia sesji, który rzucony wyjątek (nie rób tego, nawet jeśli myślisz, że wiesz co robisz)
+0

dlaczego nie możesz mieć więcej niż jednej sesji na wątek? – Hugusta

+0

@Hugusta Ty ** możesz ** mieć wiele sesji na wątek. – Jay

+0

o tak ... źle odczytałem! Dziękuję za Twoją odpowiedź. – Hugusta

4

+1 co powiedział Jay. Polecam również przeczytaniu artykułu Oren Eini w sprawie Budowanie pulpitu do wykonania aplikacji z NHibernate:

http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

Wykorzystuje WPF jako technologia UI, ale wszystko, co mówi (wrt NHibernate w aplikacjach desktopowych) jest równie istotne dla WinForms.

Powiązane problemy