2010-09-03 4 views
2

En ce moment im essayant d'implémenter le code qui manipule des exceptions d'état périmées (c.-à-d., Un autre utilisateur a changé cette rangée etc ..) joliment commettre une transaction utilisant nhibernate. L'idée est, lorsque l'exception se produit lors du vidage, de restaurer la transaction, de "réparer" les entités par différents moyens, puis de réexécuter le code de transaction entier. Mon problème est que, lorsque la transaction est annulée, la propriété version des entités a encore été incrémentée pour les entités qui ont correctement mis à jour la base de données, même si la transaction dans la base de données a été annulée (Ceci est également vrai pour la entité qui a échoué à la transaction). Cela signifie que la deuxième exécution ne réussira jamais, car la version n'est pas synchronisée avec la base de données.NHibernate, Rollback rollback et Entity version

Comment résoudre ce problème?

Répondre

4

Lorsqu'une exception NHibernate est levée, vous DEVEZ jeter cette session, car l'état n'est plus considéré comme valide.

Cela implique également de récupérer les entités.

+0

Oui, il semble que la meilleure pratique est de reconfigurer les entités. Cependant, ce n'est pas une option pour moi dans ce cas (nécessite trop de refact que nous n'avons pas budget pour atm) QUe autres options ai-je? – MatteS

+0

Peut-être session.Refresh ou session.Merge. –