Comment identifier une session d'une entité particulière usine avec Fluent NHibernate et bases de données multiples

StackOverflow https://stackoverflow.com/questions/2698503

Question

Question suite à Fluent NHibernate + plusieurs bases de données (pas besoin de suivre ce lien, il devrait y avoir suffisamment d'arrière-plan ici).

Mon problème est le suivant:

J'utilise Fluent NHibernate. Mon application utilise plusieurs bases de données. Chaque base de données a ses propres entités enregistrées (mises en correspondance) contre elle. Le résultat est que plusieurs usines ont de la session, chacun ayant trait à un seul DB, et chaque « contenant » son propre ensemble d'entités cartographiées.

Pour les entités de chargement je l'ai créé une classe usine générique qui fournit des méthodes de charge standard utilisable pour toute entité enregistrée (en tout DB). Le problème est le suivant: Les méthodes de charge doivent utiliser l'usine de la session correcte pour la classe d'entité je traite occupé avec. Comment pourrais-je déterminer quelle usine session, je dois utiliser? J'ai toutes les usines session « main » (et indexé par le nom de la base de données), il me faut juste une façon, sachant que le type d'entité que je suis sur le point de charge, de choisir la bonne session d'usine à 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 faut-il aller dans GetSessionFactory (BOType)?

Merci pour la lecture!

Était-ce utile?

La solution

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

IClassMetadata metadata = sessionfactory.GetClassMetadata(boType); 

Si vous pouvez maintenir une liste de vos instances ISessionFactory, vous pouvez énumérer votre chemin à travers eux jusqu'à ce que vous trouviez celui qui a des métadonnées pour votre BOType type.

Je ne l'ai jamais utilisé et ne pas mes références à la main, mais je voudrais attendre soit nulle de retour ou déclencher une exception si elle ne reconnaît pas le type. Si vous obtenez une valeur pour les métadonnées sans erreur, alors que de votre usine de session.

Bonne chance

Neil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top