将 TransactionScope 与 SQLite 一起使用会导致数据库锁定异常

sta*_*ikk 5 c# sqlite transactionscope

我正在尝试调整使用TransactionScopeOracle 并与 Oracle 一起使用的 ac# 代码,以便也与 SQLite 一起使用。我的代码的结构方式是,在访问 SQLite 数据库的事务范围内调用的每个方法都会创建自己的SQLiteConnection对象。

现在我在尝试打开TransactionScope块内的第二个连接时遇到了问题。我SQLiteConnection通过将它们包装在 using 语句中或调用Disposefinally 块来小心地正确处理所有未使用的对象。无论我做什么,第二次调用都会SQLiteConnection.Open数据库被锁定异常一段时间后超时 。

示例代码:

using(var transaction = new TransactionScope(TransactionScopeOption.Required))
{
    using(var connection1 = new SQLiteConnection(_connectionString))
    {
        connection1.Open();
        ... // Do stuff with the open connection

    } // Closes the connection 

    using(var connection2 = new SQLiteConnection(_connectionString))
    {
        // database locked exception
        connection2.Open();          
        ... 
    } 
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我对这个问题的所有发现都在这篇文章中:http : //elegantcode.com/2010/07/02/using-transactionscope-with-sqlite/它说:

即使在处理第一个连接时,TransactionScope 也持有独占写入器锁。因为第一个连接不能完全关闭自身,打开第二个连接会导致锁定错误。

不幸的是,这篇文章没有提供任何解决方法。我很愿意坚持使用TransactionScope由于具有传递SQLiteConnectionSQLiteTransaction对象在我的代码,每个方法将是一个很大的努力改写更别提代码看起来更凌乱。有什么建议吗?