2010-08-30 7 views
1

Nous utilisons NHibernate avec le mappage Fluent pour créer une application WebForms.Nhibernate ne pas mettre à jour la relation en cascade sur Win Server 2008

Dans notre modèle, nous avons une relation simple References avec Cascade.All() ensemble. Lorsque nous sauvegardons l'entité, NH se comporte comme prévu et 1) enregistre l'entité référencée, 2) met à jour l'entité parent définissant la clé enfant. Le déploiement de cette même version sur notre serveur de production (Win Server 2008) et le fait de pointer l'application vers la même base de données, cependant, produit une sortie différente. NH 1) enregistre l'entité référencée et .. et .. c'est tout, rien d'autre ne se passe !! Je sais que nos environnements de test et de production devraient être les mêmes, etc., mais nous sommes en train de déployer maintenant et je n'arrive tout simplement pas à comprendre comment cela peut se produire.

Y at-il un problème connu avec NH dans Win 2008 Server concernant les autorisations d'assemblage ou quelque chose comme? On dirait que le proxy ne fonctionne pas correctement pour une raison quelconque, mais je ne peux vraiment pas dire pourquoi! Analyse des fichiers journaux NH J'ai pu constater que NH ne note pas que la propriété référencée a été modifiée dans Win Server 2008. Pourquoi? Aucune idée, mais cela ressemble de plus en plus à un problème de proxy.

Toute aide est vraiment appréciée.

Filipe

+1

Avez-vous activé la journalisation nHibernate. Y a-t-il quelque chose qui pourrait suggérer une divergence? –

+0

@David, édité le post l'informant. Je vais essayer de changer de Castle à un autre proxy pour voir si quelque chose change. – jfneis

Répondre

0

J'ai enfin trouvé ce qui était à l'origine du problème. NH ne mettait pas à jour le relatioship car il n'avait aucune transaction couvrant les déclarations. Cela ne semble pas logique dans un premier aspect, mais il y a d'autres situations où NH se comporte correctement si vous avez une transaction ouverte (par exemple: NHibernate FlushMode Auto Not Flushing Before Find). Nous avons eu cette situation dans d'autres projets et la théorie convient.

Mais qu'en est-il de Windows Server 2008? En fait, le problème était dans notre fichier web.config avec IIS 7. Comme nous utilisons un contrôle de transaction automatique avec un design OpenSessionInView, nous enregistrons un élément httpModules. Mais dans IIS 7, nous devons enregistrer un article modules, et nous ne l'avons pas. Comme il n'a pas été configuré, nous n'avons eu aucune transaction, et sans transaction, les choses ne fonctionnent pas.

Leçon apprise n ° 1: plus que jamais, les transactions sont un MUST lors de l'utilisation de NHibernate. Leçon apprise n ° 2: ne jamais désactiver les messages de compatibilité IIS (pourquoi quelqu'un l'a fait?).

Filipe

Questions connexes