2009-10-29 3 views
0

Je crée une classe de référentiel qui utilise ISessionFactory.GetCurrentSession() pour trouver la session en cours avec laquelle ses méthodes devraient fonctionner et utilisé CurrentSessionContext.Bind pour lier une session dans mon application. Dans la configuration de NHibernate, j'ai utilisé thread_static comme current_session_context_class.Comment utiliser NHibernate CurrentSessionContext dans un temporisateur

Cela a parfaitement fonctionné jusqu'à présent. Sur chaque thread, j'ai créé une nouvelle session qui sera utilisée par l'instance du référentiel.

Mais quand j'utilise un System.Threading.Timer le rappel sera appelé sur un fil dans le ThreadPool. De sorte que je ne peux pas lier une session au-delà de l'exécution d'un callback, car le callback suivant pourrait être exécuté sur un thread différent.

Comment les sessions doivent-elles être gérées (avec ou sans CurrentSessionContext) dans un System.Threading.Timer si une session doit être utilisée pour deux exécutions ou plus du rappel?

+0

Pourquoi avez-vous besoin d'utiliser la même session pour plus d'une demande de rappel? –

+0

Parce que mon application est en cours d'exécution en arrière-plan et attendre un certain laps de temps entre chaque action (base de données insert et copie de fichiers) afin d'empêcher le système de surcharge. La session ne sera supprimée que si tout est fait. – Martin

Répondre

0

Une séance devrait être liée à une unité de travail. Il semble que vous ayez juste besoin d'une nouvelle session à chaque rappel. Les sessions sont très légères à créer.

Questions connexes