2010-06-29 3 views
0

Je crée une application ASP.NET multi-locataires en utilisant NHibernate (schéma partagé). J'avais l'intention d'utiliser les écouteurs d'événements de NHibernates pour inspecter/modifier les entités avant de les sauvegarder afin de garantir que l'ID des locataires en cours était enregistré sur l'entité.Écouteur d'événement spécifique à NHibernate ISession

Le jeton d'authentification contenant l'ID de client hébergé est géré plus haut et transmis dans la couche de données.

Mon problème est que les écouteurs d'événements sont configurés par rapport à une configuration NHibernate plutôt qu'à une session ISession spécifique. Cela signifie qu'il n'y a aucun moyen de transmettre des identifiants à utiliser, bien que je puisse accéder à l'ISession qui a provoqué l'événement.

Comment puis-je transmettre des données spécifiques ISession à l'écouteur d'événement?

Répondre

3

Vous pourriez être en mesure de le faire avec un IInterceptor implementation car ISessionFactory a une méthode OpenSession surchargée qui accepte un IInterceptor. Utilisation serait quelque chose comme:

var interceptor = new MyInterceptor(tenantId); 
var session = factory.OpenSession(interceptor); 

Malheureusement il n'y a pas de surcharge qui accepte les auditeurs.

+0

Merci Jamie, on dirait que ça pourrait faire l'affaire, je vais essayer maintenant. – Matt

Questions connexes