NHibernate回滚似乎不起作用

时间:2014-10-19 16:35:33

标签: c# mysql nhibernate

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

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

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

        session.SaveOrUpdate(user);

        tran.Rollback();
    }
}

1 个答案:

答案 0 :(得分:1)

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

如果对象应为CreatedUpdated,其中一项操作将决定。因此,如果ID生成器设置为本机/标识(例如SQL服务器) - NHibernate必须执行INSERT才能获取ID。很多操作可以推迟,但要收到身份证 - 没有办法等待。

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