Pourquoi ne NHibernate jeter “StaleObjectStateException”?
Je suis en projet d'écriture et à l'aide de NHibernate 3.1
SimpleTest:
Forum forum = Session.CreateCriteria<Forum>().Add(Restrictions.Eq("UrlName", "reportabug")).UniqueResult<Forum>();
forum.TopicsCount++;
IForumRepository forumRepository = new ForumRepository(SessionFactory);
forumRepository.Update(forum);
public virtual void Update(TEntity entity)
{
if (!session.Transaction.IsActive)
{
TResult result;
using (var tx = session.BeginTransaction())
{
session.SaveOrUpdate(entity)
tx.Commit();
}
return result;
}
session.SaveOrUpdate(entity)
}
La dernière mise à jour throws exception:
StaleObjectStateException was unhandled by user code:
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
Requête SQL:
UPDATE Forums
SET Name = 'Forums Issues (not product support)' /* @p0 */,
UrlName = 'reportabug' /* @p1 */,
Description = 'Use this forum to report issues with the online forums application. When reporting an issue please include relevant details such as repro steps, error messages and browser version.' /* @p2 */,
CategoryId = 'b2cc232c-0d5c-4f35-bb6f-29c67d7d40c2' /* @p3 */,
TopicsCount = 1 /* @p4 */
WHERE ForumId = '864046b7-ca57-48c4-8a81-082103223527' /* @p5 */
ForumId est correct.
C'est peut-être la simultanéité?
Avez-vous des idées?
- l'exception est levée sur la ligne tx.Commit();
Vous devez vous connecter pour publier un commentaire.
StaleObjectStateException
est une façon de hibernate s'assurer de la cohérence des données de lecture de l'API ici. Hibernate maintient laversion
des objets, des mises à jour et provoquera une erreur si la version en DB et en mémoire ne correspond pas. Lire plus sur le verrouillage optimiste mécanisme ici.Donc, Déboguer l'application avec cette information. Je ne suis pas familier avec
C#
de syntaxe, mais je pense que la deuxième sauver devrait être danselse
condition.session.SaveOrUpdate(entity)
, il n'est pas nécessaire pour cela.