2010-08-27 3 views
1

Je reçois l'erreur suivante dans une application Castle Asp.Net ActiveRecord lorsque vous essayez de mettre à jour un objet:Comment trouver l'objet dans NHibernate/château activerecord séance

« un objet différent avec la même valeur d'identifiant est déjà associé avec la session »

Je l'ai regardé de haut en bas mon code pour voir où les autres l'objet aurait été créé, mais je ne le vois pas. C'est déconcertant car j'ai exactement le même code sur une autre page qui fonctionne bien sur les mises à jour

Maintenant, je pense à essayer de voir où cet autre objet est dans la session et soit le tuer ou savoir comment il est entré dans la session. Comment puis-je trouver cet objet?

[Mise à jour] Ok, j'ai finalement trouvé où l'objet est appelé. Cependant, j'aimerais toujours savoir comment trouver des objets dans la session pour référence future.

+0

Utilisez-vous des objets que vous avez enregistrés dans ViewState ou (Session ASP.NET)? – Jerome

+0

Oui, j'en garde une copie dans la page ViewState. – KeithA

Répondre

1

Si vous devez vérifier si un objet est dans votre session, vous êtes probablement faire les choses dans le mauvais sens depuis le début. Reconsidérez comment vous gérez votre session et vos objets persistants. Cela dit, vous pouvez essayer ISession.Contains(), mais IIRC ne fonctionnera que si vous vérifiez avec l'instance exacte qui est stockée dans la session.

+0

Le problème venait de l'utilisation de ces objets dans une liste déroulante. Ces objets dans le menu déroulant ne doivent pas nécessairement être persisté et je ne sais pas comment obtenir les objets à charger et oublier les autres que d'appeler explicitement Evict sur les objets dès qu'ils ne sont plus nécessaires. Je suppose que le terme approprié pour eux serait transitoire? – KeithA

+0

@KeithA: considérer databinding contre DTO, sinon appelez Evict sur les objets persistants. –

Questions connexes