Cela semble être un problème commun, mais je ne connais pas la meilleure façon de le résoudre. Je souhaite être en mesure d'envoyer une Entité à une vue, d'apporter des modifications à l'entité dans la vue, puis d'annuler (supprimer) ces modifications si l'utilisateur annule la vue. Quelle est la bonne façon de le faire.NHibernate & Annulation des changements aux entités
Voici deux options que j'ai, mais je pense qu'il devrait y avoir d'autres qui sont mieux
1) Prendre une entité, créer un clone, envoyer le clone à la vue ... si des modifications sont acceptées, mettez à jour le Envoyer l'entité à la vue originale entité avec les valeurs
2) du clone, si l'utilisateur annule, retirez l'entité du cache de NHibernate et le recharger à partir de la base de données
pour (2), la question me serait soit que l'ancienne entité puisse toujours être référencée dans mon projet après qu'elle a été retirée du cache.
Edit:
Ok, donc la méthode est evict la voie à suivre si je suis méthode d'exécution (2). Merci, je ne pouvais pas me souvenir des détails de celui-là. Cependant, la question des objets de vue faisant référence à mes anciennes entités expulsées rend la question difficile à traiter. Je ne peux pas simplement faire en sorte que ma vue soit automatiquement mise à jour vers une nouvelle entité sans avoir de code personnalisé dans chacune d'entre elles pour la relancer lorsque mon événement d'éviction personnalisé est déclenché. Et la reliure peut ne pas être triviale dans certains cas. Je dois y réfléchir un peu plus car je suis peut-être trop compliqué mais pour l'instant, cette méthode semble plus délicate.
Je suppose que je vais être bloqué avec la méthode (1) qui a son propre ensemble de problèmes mais attendra un peu plus longtemps pour voir si quelqu'un d'autre a des idées.
Édition 2: Je viens de trouver ceci. Je pense que à peu près couvre la réponse en détail et est livré avec un grand projet de démonstration - Construire un bureau Choses à faire application avec NHibernate - http://msdn.microsoft.com/en-us/magazine/ee819139.aspx
En plus de cela, NHibernate a une Session.Refresh (entité objet) fonction qui semble résoudre le problème exact. Ainsi, lorsqu'une entité est modifiée mais annulée avant la sauvegarde, je peux simplement appeler Session.Refresh pour la recharger à partir de la base de données et rejeter les modifications.
Un problème commun avec 'Refresh' se produit lorsque l'entité a établi des relations en cascade, alors ces enfants (les entités liées) seront également rafraîchis - Cela peut avoir un impact notable sur les performances. Je viens de faire face au problème que je décris, donc cette information peut aider les autres – jweyrich