2010-02-08 7 views
1

Comment gérer la session si j'utilise Castle Active Record sur nHibernate. Fondamentalement, je peux gérer le cycle de vie de ISession moi-même si j'utilise nHibernate directement. Mais quand j'utilise Castle AR, cela ne me permet pas de gérer le cycle de vie de la session. Je veux utiliser une seule session par thread.Gestion de session dans l'enregistrement actif Castle


J'utilise le château AR dans un service WCF et souhaite utiliser la session par demande de WCF.

Répondre

2

Au lieu d'utiliser ISession, dans le château ActiveRecord vous voulez SessionScope:

using(new SessionScope()) 
{ 
    ; // do work here 
} 

Si vous avez besoin d'accéder à l'ISession à l'intérieur du SessionScope pour une raison quelconque, vous pouvez le faire:

ISession dbSession = Castle.ActiveRecord.ActiveRecordMediator 
     .GetSessionFactoryHolder().CreateSession(
      typeof(Castle.ActiveRecord.ActiveRecordBase)); 

Plus la documentation est ici:

http://www.castleproject.org/activerecord/documentation/trunk/usersguide/scopes.html#sess_scope

et ici:

http://www.castleproject.org/activerecord/documentation/trunk/manual/scopes.html

+0

Ne fonctionne pas, donne à un objet ref non défini sur une instance d'une erreur d'objet lorsque vous essayez d'obtenir le dbSession. – Justin

+0

Savez-vous que si vous appelez '.CreateSession()' sur le support de fabrique de session, vous créez une portée actuelle? Lorsque je l'essaie, SessionScope.Current est null, donc chargement paresseux échoue. Il doit être possible d'initialiser une portée de session en cours puisque 'SessionScopeWebModule' le fait. –

+0

Peu importe, je l'ai compris. Vous venez juste de créer un 'SessionScope' et il l'a enregistré dans le thread actuel. –

0

Je suppose que vous travaillez dans une application Web. N'est-ce pas le cas?

Il y a deux façons de le faire - Castle AR documentation

La façon la plus simple est la SessionScopeWebModule d'utiliser pour donner une séance par demande.

+0

Je travaille dans l'application Web, mais applications web délégués appellent à un service WCF où le château AR est utilisé. Je voudrais utiliser Session par requête WCF? – Amitabh