Comment identifier la Session Factory d’une entité particulière avec NHibernate Fluent et plusieurs bases de données

La question fait suite à Fluent NHibernate + plusieurs bases de données (inutile de suivre ce lien, il devrait y avoir suffisamment de fond ici).

Mon problème est le suivant:

J’utilise NHibernate Fluent. Mon application utilise plusieurs bases de données. Chaque firebase database a ses propres entités enregistrées (mappées) contre elle. Le résultat est que plusieurs usines de session sont associées, chacune se rapportant à un seul DB, et chacune contenant son propre ensemble d’entités mappées.

Pour le chargement d’entités, j’ai créé une classe Factory générique qui fournit des méthodes de chargement standard utilisables pour toute entité enregistrée (dans n’importe quelle firebase database). Le problème est le suivant: les méthodes de chargement doivent utiliser la fabrique de session correcte pour la classe d’entité avec laquelle je travaille. Comment pourrais-je déterminer quelle fabrique de sessions je dois utiliser? J’ai toutes les usines de session sous la main (et indexées par nom de firebase database), j’ai juste besoin d’un moyen, connaissant simplement le type d’entité que je vais charger, de choisir la bonne fabrique de session à utiliser.

Par exemple:

public IBaseBusinessObject CreatePopulatedInstance(Type boType, Guid instanceKey) { IBaseBusinessObject result = null; ISessionFactory sessionFactory = GetSessionFactory(boType); using (ISession session = sessionFactory.OpenSession()) { using (session.BeginTransaction()) { result = (IBaseBusinessObject)session.Get(boType, instanceKey); } } return result; } 

Que doit-on continuer dans GetSessionFactory (boType)?

Merci d’avoir lu!

Je commencerais par regarder la méthode ISessionFactory.GetClassMetaData.

 IClassMetadata metadata = sessionfactory.GetClassMetadata(boType); 

Si vous pouvez conserver une liste de vos instances ISessionFactory, vous pouvez les énumérer jusqu’à ce que vous trouviez celle qui contient des métadonnées pour votre type boType.

Je ne l’ai jamais utilisé et je n’ai pas mes références en main, mais je m’attendrais à ce qu’il renvoie null ou lève une exception s’il ne reconnaît pas le type. Si vous obtenez une valeur pour les métadonnées sans erreur, alors c’est votre fabrique de session.

Bonne chance

Neil.