2010-03-26 4 views
5

Écoutons d'abord ceci: je sais que SessionFactory est immuable - j'essaie de changer la configuration à l'exécution et de régénérer ISessionFactory.NHibernate: Comment reconfigurer les mappages lors de l'exécution?

Spécifiquement, j'ai un client mappé qui aura des champs ajoutés à son noeud de composant dynamique lors de l'exécution. Je voudrais faire quelque chose comme ça

var newSessionFactory = previousConfiguration 
    .RemoveClassMapping(typeof(Customer)) 
    .AddXmlString(newMappingForCustomer) 
    .BuildSessionFactory(); 

Cependant, je ne vois pas de façon évidente de supprimer un mappage, est-ce que je peux faire à court de régénérer toute la configuration?

+0

En fait, ce n'est pas une question Fluent NHibernate et je préfère éviter de prendre la dépendance pour le moment, mais je le prendrai si besoin est. –

Répondre

1

Ce n'est pas possible. Vous devrez régénérer le Configuration.

Ma suggestion initiale serait que vous choisissiez une stratégie différente pour votre modèle.

Toutefois, si vous êtes déterminé à aller avec ce :-), vous pouvez:

  • Créer une "partielle" Configuration (qui ne comprend pas Customer)
  • SERIALIZE à un MemoryStream
  • Ajoutez le mappage « de base » Customer, si nécessaire
  • Créer le SessionFactory
  • Récupérer toutes les informations temporaires que vous NE ne ed à la carte Customer
  • deserialize votre sauvé Configuration
  • Ajoutez le mappage Customer et créez votre dernière SessionFactory
+0

Quelle stratégie différente Diego? Si des champs sont ajoutés aux composants dynamiques et que les colonnes mappées sont ajoutées aux bases de données lors de l'exécution (bien que de façon assez rare), il semble que régénérer SessionFactory soit de loin le plus simple. –

+0

La stratégie différente n'ajoute pas de champs à une base de données lors de l'exécution. Au lieu de cela, conservez une table distincte avec vos définitions d'attributs personnalisés et une autre avec vos valeurs d'attribut personnalisées. –

+0

Ouais c'est ce que j'ai initialement proposé aussi mais cette stratégie tue à la fois la performance et la compatibilité héritée n'est-ce pas? Je suis un peu surpris que NH n'ait pas été conçu avec ce scénario en tête. Ce n'est pas si rare. Je comprends bien que l'immuabilité de SessionFactory est importante, mais qui s'en soucie si la classe Configuration est découpée en dizaines de façons différentes si vous voulez régénérer l'usine de toute façon. –

Questions connexes