我遇到了一個問題,使用TransactionScope
時事務不回滾。我們在內存SQLite數據庫中使用NHibernate,這樣在應用程序整個生命週期(在這種情況下,一些單元測試)期間,我們僅限於一個數據庫連接。TransactionScope與SQLite內存中的數據庫和NHibernate
using (var ts = new TransactionScope(TransactionScopeOption.Required,
TimeSpan.Zero))
{
using (var transaction = _repository.BeginTransaction())
{
_repository.Save(entity);
transaction.Commit();
}
// ts.Complete(); <- commented Complete call still commits transaction
}
即使我刪除了NHibernate的內部嵌套事務,所以代碼如下所示,事務仍然被提交。
using (var ts = new TransactionScope(TransactionScopeOption.Required,
TimeSpan.Zero))
{
_repository.Save(entity);
} // no Complete(), but the transaction still commits
是期待它,以爭取其在交易中TransactionScope
塊內部剛剛打開的SQLite連接?
同樣,我不能提供一個新的連接,因爲這將清除數據庫。
使用NHibernate 3.0和SQLite 1.0.66.0,這兩個最新版本在寫作時。
注: NHibernate的ITransaction
對象上使用transaction.Rollback()
正確回滾事務,它只是TransactionScope
支持,似乎並沒有工作。
不SQLite的(及其驅動程序)的支持分佈式事務,或者是它明確瞭解TransactionScope? – 2011-03-20 17:02:03
@diego:是的,根據SQLite ADO.NET提供商論壇上的帖子,TransactionScope已經支持了幾年。 「自動分佈式事務登記」也是其主頁上記錄的功能之一。 – andreialecu 2011-03-20 17:10:23
並且如果您在作用域結束後檢查,數據是否仍然存在? – 2011-03-20 17:37:13