【问题标题】:NHibernate rollback does not seem to workNHibernate 回滚似乎不起作用
【发布时间】:2014-10-19 16:35:32
【问题描述】:

我的问题很简单。我有下面的代码,用户仍然被插入。当我在SaveOrUpdate 之后(回滚之前)检查数据库时,我看到用户已经插入。这就像刷新模式和事务不工作。我哪里错了?

using (var session = sessionFactory.OpenSession())
{
    session.FlushMode = FlushMode.Never;

    using (var tran = session.BeginTransaction())
    {
        var user = CreateUser();

        session.SaveOrUpdate(user);

        tran.Rollback();
    }
}

【问题讨论】:

  • 如果根据您的描述,您还没有真正执行回滚,请不要声称回滚已损坏。

标签: c# mysql nhibernate


【解决方案1】:

如果我们检查“就在SaveOrUpdate”之后 ...我们仍然在一个事务中。在最终决定(提交或回滚)之前可能会发生很多事情。

其中一项操作是决定对象应该是Created 还是Updated。因此,如果 ID 生成器设置为本地/身份(例如 SQL 服务器) - NHibernate 必须执行 INSERT 以获取 ID。很多操作可以推迟,但要接收 ID - 没有办法等待。

所以很可能您的 ID 需要从 DB 中获取。这就是 INSERT 发生的原因。 但是在调用Flush() 之前,不会将其他内容写入数据库中......所以,我不会将所描述的行为标记为特殊的。

【讨论】:

  • 这是因为我的表使用的是不支持事务的 MyISAM 引擎。事实证明我需要改用 InnoDB 引擎。无论如何,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 2016-02-01
  • 2020-09-23
相关资源
最近更新 更多