2

我想保留一个会话,但是当我回滚事务时,事务得到 isActive=false,所以我不能使用相同的事务在下一个语句中提交和回滚。那么我需要创建新的交易,但这里出了什么问题?

        var session = NHibernateHelper.OpenSession();/* It returns new session. */
        var transaction1 = session.BeginTransaction();
        var list1 = session.Query<Make>().ToList(); /* It returs 4 records. */
        session.Delete(list1[2]);

        /* After Rollback, transaction is isActive=false so I can not commit 
         * and rollback from this transaction in future. so I need to create new transaction.
         */
        transaction1.Rollback();

        var transaction2 = session.BeginTransaction();

        /* It returns 3 records. 
         * I am not getting object(which was deleted but after that rollback) here why ? 
         */
        var list2 = session.Query<Make>().ToList(); 

有人知道这里出了什么问题吗?我没有得到已删除的回滚对象。

4

2 回答 2

0

刷新意味着 NHibernate 将确保所有更改都保存到数据库中。也就是说,它将确保执行所有必要的 SQL 语句,使会话与数据库保持同步。ISession 将执行将 ADO.NET 连接状态与内存中保存的对象状态同步所需的 SQL 语句。

在您的情况下:当事务是回滚时,所有​​这些更改都将被还原,但会话仍然没有同步到数据库。

所以 Session.Flush() 会这样做。

http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-endingsession

于 2012-12-02T05:31:14.553 回答
0

我花了一段时间才弄清楚,但解决方案很容易。

由于没有inside,所以 SQL是在里面自动执行Flush的,在.transaction1DELETEtransaction2SELECT

这种行为是预期的。

于 2012-09-03T00:32:36.267 回答