2014-10-19 89 views
0

我的問題很簡單。我有下面的代碼,用戶仍然插入。當我在SaveOrUpdate之後(並在回滾之前)檢查數據庫時,我看到用戶已被插入。這就像清空模式和交易不起作用。我哪裏錯了?NHibernate回滾似乎不起作用

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

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

     session.SaveOrUpdate(user); 

     tran.Rollback(); 
    } 
} 
+0

不要求根據您的描述,當您還沒有實際執行回滾時,回滾會被破壞。 – 2014-10-19 18:06:32

回答

1

如果我們檢查「只是SaveOrUpdate後」 ...我們還是一個事務內。很多東西可能會在最終決定(提交或回滾)之前發生。

如果對象應該是CreatedUpdated,其中一項操作應該是來決定。因此,如果ID生成器設置爲native/identity(例如SQL服務器) - NHibernate必須執行INSERT才能獲得ID。很多操作可能會推遲,但要獲得身份證 - 無法等待。

所以很可能你的ID需要從DB獲得..這就是INSERT發生的原因。 但是其他東西不會被寫入DB,直到調用Flush() ...所以,我不會將描述的行爲標記爲特殊的東西。

+0

這是因爲我的表使用不支持事務的MyISAM引擎。事實證明,我需要使用InnoDB引擎。無論如何,感謝您的幫助。 – 2014-10-21 11:15:37