1
我有一套集成測試在事務內部運行。 有時似乎NHibernate事務沒有正確回滾。我無法弄清楚是什麼原因造成的。NHibernate事務隨機不會回滾
這是基礎類的略微簡化的概述,這些集成測試夾具與運行:
public class IntegrationTestFixture
{
private TransactionScope _transactionScope;
private ConnectionScope _connectionScope;
[TestFixtureSetUp]
public virtual void TestFixtureSetUp()
{
var session = NHibernateSessionManager.SessionFactory.OpenSession();
CallSessionContext.Bind(session);
_connectionScope = new ConnectionScope();
_transactionScope = new TransactionScope();
}
[TestFixtureTearDown]
public virtual void TestFixtureTearDown()
{
_transactionScope.Dispose();
_connectionScope.Dispose();
var session = CurrentSessionContext.Unbind(SessionFactory);
session.Close();
session.Dispose();
}
}
一個調用的commit方法永言的TransactionScope,所以怎麼可能是數據還是結束在數據庫中?
更新我從來沒有真正理解NHibernate處理事務的方式,但我發現在事務內調用Session.Flush()有時會導致數據保留在數據庫中,即使事務被滾動背部。我不確定你爲什麼不能打電話給Flush,但後來回滾。這是一個遺憾,因爲在集成測試期間,您希望能夠訪問數據庫,並且刷新是有時執行此操作的唯一方法。
現貨,解決了我遇到的問題。我最終實現了HiLo生成器。 – Faisal 2012-08-26 05:47:37
如果這是問題,則表示您正在調用session.Save()或NH事務外的類似語句。如果您確實已經定義了事務,則NH將永遠不會在活動事務之外插入對象。但是,你的代碼只顯示TransactionScope,而不是NH事務,這可能會有問題。 – 2012-11-04 11:39:15