c# - NHibernate回滚似乎不起作用

标签 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();
    }
}

最佳答案

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

其中一项操作是决定对象应该创建还是更新。因此,如果 ID 生成器设置为 native/identity(例如 SQL Server),NHibernate 必须执行 INSERT 来获取 ID。很多操作可以推迟,但要收到 ID - 没有办法等待。

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

关于c# - NHibernate回滚似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452752/

相关文章:

c# - 如何将对象从 Asp.Net MVC 4 重新附加到 Fluent NHibernate

c# - 如何在特定字符后获取子字符串

mysql - 如何在 MySql 表中选择每一行 N 次?

mysql - 频繁写作的栏目越少越好吗? mysql

javascript - 如何将动态添加的内容存储到数据库

Nhibernate 探查器显示警告 "Use explicit Save or Update in session"

c# - INotifyPropertyChanged PropertyChangedEventHandler 事件始终为 null

c# - Html.Display() 的语法是什么?

Java多维数组到C#

c# - 在 Fluent NHibernate 中,如何将自动映射类型与非自动映射类型结合起来?