2010-12-29 18 views
6

Ho bisogno di alcuni consigli su NHibernate Session Management per un'applicazione C# WinForms.Consigli per la gestione delle sessioni di NHibernate

Attualmente sto eseguendo il porting di un'applicazione per utilizzare NHibernate. Sto anche utilizzando un pattern UnitOfWork come descritto nel link sottostante;

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

mia domanda riguarda Sessions.

  1. Si può avere solo una sessione in esecuzione per thread in ogni momento?

  2. Ho uno scenario in cui una sessione (UnitOfWork) può essere aperta per un modulo mostrato dall'applicazione ma l'utente apre un altro modulo (ad esempio Strumenti - Opzioni) che mi piacerebbe avere il proprio UnitOfWork. Chiaramente in questo caso avrebbe più senso aprire un'altra sessione per il modulo "Strumenti - Opzioni" e non utilizzare la sessione attualmente aperta per il modulo sottostante.

  3. Possiamo avere un dizionario di sessioni su un thread?

Qualsiasi consiglio sulla gestione delle sessioni è apprezzato.

risposta

3

1 - È possibile disporre di tutte le sessioni richieste dal caso d'uso.

2 - Va bene, sulla base di 1

3 - È possibile inserire le variabili di sessione in un dizionario o di qualsiasi altra raccolta.

Cosa non si deve fare a meno che tu non sappia quello che stai facendo e perché è:

  • utilizzare la stessa sessione in più di un filo
  • entità passa da una sessione/UoW ad un altro
  • tentativo di riutilizzare una sessione che ha generato un'eccezione (non farlo, anche se si pensa di sapere cosa si sta facendo)
+0

come mai non è possibile avere più di una sessione per thread? – Hugusta

+0

@Hugusta Puoi ** avere più sessioni per thread. – Jay

+0

oh sì ... ho letto male! La ringrazio per la risposta. – Hugusta

4

+1 su ciò che Jay ha detto. Auspico inoltre letto l'articolo di Oren Eini su Costruire un'applicazione desktop To-Do con NHibernate:

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

Esso utilizza WPF come la tecnologia di interfaccia utente, ma tutto quello che dice (WRT NHibernate in applicazioni desktop) è ugualmente rilevante per WinForms.

Problemi correlati