Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate回滚似乎不起作用_C#_Mysql_Nhibernate - Fatal编程技术网

C# NHibernate回滚似乎不起作用

C# NHibernate回滚似乎不起作用,c#,mysql,nhibernate,C#,Mysql,Nhibernate,我的问题很简单。我有下面的代码和用户仍然插入。当我在保存或更新之后(回滚之前)检查数据库时,我看到用户已经插入。这就像刷新模式和事务不工作一样。我哪里做错了 using (var session = sessionFactory.OpenSession()) { session.FlushMode = FlushMode.Never; using (var tran = session.BeginTransaction()) { var user = C

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

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

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

        session.SaveOrUpdate(user);

        tran.Rollback();
    }
}
如果我们在
保存或更新之后选中。。。我们仍在进行一笔交易。在最终决定(提交或回滚)之前可能会发生很多事情

其中一个操作是决定是否创建对象
或更新对象
。因此,如果将ID生成器设置为native/identity(例如SQL server),则NHibernate必须执行插入以获取ID。许多操作可能会延迟,但要接收ID,则无法等待


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

根据您的描述,当您尚未实际执行回滚时,不要声称回滚被破坏。这是因为我的表使用的是不支持事务的MyISAM引擎。事实证明我需要使用InnoDB引擎。无论如何,谢谢你的帮助。