2009-11-17 8 views
1

J'ai deux applications en cours d'exécution sur une machine, où NHibernate est utilisé comme ORM. Une application gère les objets (opérations CRUD), tandis que l'autre traite les objets (get, process, set status et save).Problème de concordance/cache NHibernate

D'abord, je laisse l'application de traitement traiter un objet et définir le statut à traiter. Ensuite, je modifie manuellement une propriété de texte dans la base de données et réinitialise l'état (pour le faire traiter à nouveau). La modification manuelle de la base de données permet de simuler l'application de gestion. Ensuite, je commence à voir les problèmes:

  1. L'objet de lecture a encore l'ancienne propriété de texte, un événement que je l'ai changé dans la DB. Je suppose que la mise en cache NHibernate est le problème ici. Lorsque j'affecte l'état de l'objet à traiter, il utilise toutes les propriétés de la clause where lors de la mise à jour, ce qui signifie qu'il n'est pas mis à jour dans la base de données. C'est parce qu'il a le mauvais texte dans une propriété. Je suppose que cela a aussi à voir avec la mise en cache.

La conséquence de l'état non mis à jour est que le même objet (avec mauvais texte) est traité plus et plus et plus ...

quelqu'un là-bas qui peut me aider avec la façon dont je devrais configurer NHibernate pour faire disparaître ce problème?

Répondre

0

Mieux vaut appeler la méthode refresh sur l'objet que vous voulez, car flush peut avoir des effets secondaires indésirables.

+0

Quels sont les effets secondaires? –

+0

Vous voulez dire Session.Refresh (obj)? Je suppose qu'un déplacement vers la base de données a déjà été effectué lors de l'exécution des critères, ce qui entraînerait un déplacement supplémentaire dans la base de données pour chaque objet, n'est-ce pas? Cela semble être une mauvaise chose à faire du point de vue de la performance. Est-ce que je ne peux pas faire quelque chose dans les critères lors du traitement de tout un tas d'objets? – Kristoffer