2009-11-08 19 views
4

Nous avons un système relativement robuste utilisant NHibernate, nous sommes en train de passer d'un serveur de base de données unique à deux serveurs, un pour l'administration et un pour notre site web public . C'est principalement pour que nous puissions faire des choses comme la gestion de contenu avec workflow qui n'affectera pas le site actuel. À ce jour, ils sont deux bases de données dans le même serveur, mais au fil du temps, je peux voir l'utilisation de deux machines physiques avec un appel de service Web pour pousser les données. Par exemple, l'un de nos commerciaux décide d'introduire une nouvelle promotion via l'admin, et de la programmer pour 2 semaines à partir de maintenant. Nous travaillons sur un système de planification qui enverrait la nouvelle promotion à notre serveur de production quand il serait lancé. L'intention était d'utiliser les mêmes fournisseurs de NHibernate pour les poussées de données, mais nous devons maintenir l'intégrité référentielle. Nous utilisons un nhibernate fluide, et je peux voir écrire deux cartes de classes différentes, puis utiliser une forme d'injection de dépendance (carte de structure IE) pour choisir la carte à charger. J'espérais une meilleure réponse car cela semble impossible à maintenir à mesure que le système se développe. Aucune suggestion?Forcer une insertion d'identité avec NHibernate/Fluent Nhibernate

+0

Et quelle est votre question? Vous voulez utiliser le même identifiant sur les deux serveurs? – BennyM

+0

C'est exact. J'ai écrit des tests sur différentes méthodes sur ISession - Replicate, Merge, SaveOrUpdate, SaveOrUpdateCopy. Tous ces éléments généreront une erreur générant un nouvel ID au lieu d'utiliser l'ID actuel. J'ai vu la méthode CurrentSession(). Replicate (entity, ReplicationMode.Overwrite); - Il semblait le plus prometteur. Est-ce que c'est peut-être un bug? – jcavaliere

+0

Utilisez-vous des ID générés par db? – BennyM

Répondre

4

ISession.Replicate n'est pas pris en charge avec les valeurs d'ID générées par la base de données. Comme illustré par this issue dans le traqueur de problème de NHibernate.

  • Je suggère soit utiliser votre propre ID générateur ou Guid/Guid.Comb depuis vous serez en mesure d'utiliser la réplication NHibernate dans ce cas (comme expliqué dans le numéro)
  • Vous pouvez Également écrire votre propre code de réplication qui n'utilise pas NHibernate, si c'est assez simple c'est faisable.
  • Utilisez la technologie de réplication prise en charge par votre base de données. J'ai déjà utilisé la réplication entre MS SQL Servers, et ce n'est pas si difficile à configurer. Je suis sûr que d'autres SGBDR supportent des choses similaires.