我遇到了一个问题,使用TransactionScope
时,事务没有回滚。
我们正在使用NHibernate和内存中的SQLite数据库,因此在应用程序的整个生命周期(在这种情况下是一些单元测试)中,我们只能使用一个数据库连接。
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
支持似乎不起作用。