为什么NHibernate会抛出' ' staleobjectstateexception ' ' ?

本文关键字:staleobjectstateexception NHibernate 为什么 | 更新日期: 2023-09-27 18:12:56

我正在写一个项目,使用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)
}

最后一次更新抛出异常:

StaleObjectStateException was unhandled by user code:
    Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
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正确。也许这就是并发性?有什么想法吗?

为什么NHibernate会抛出' ' staleobjectstateexception ' ' ?

StaleObjectStateException是一种休眠方式,确保数据一致性。Hibernate维护它更新的对象的version,如果数据库中的版本和内存中的版本不匹配,将抛出错误。阅读更多关于乐观锁机制的信息。

因此,使用此信息调试应用程序。我不熟悉C#语法,但我认为第二次保存应该是在else条件下。

相关文章:
  • 没有找到相关文章