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

时间:2015-08-24 12:12:21

标签: c# sqlite transactionscope

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

现在,我在尝试在TransactionScope块中打开第二个连接时遇到了问题。我正在小心处理所有未使用的SQLiteConnection对象,方法是将它们包装在using语句中,或者在finally块中调用Dispose。无论我做什么,第二次打电话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();          
        ... 
    } 
}

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

  

即使在什么时候,TransactionScope仍然拥有独占的编写器锁   处理第一个连接。因为第一次连接不能   完全关闭自己,打开第二个连接导致锁定   错误。

不幸的是,该文章没有提供任何解决方法。我非常想坚持使用TransactionScope因为必须将SQLiteConnectionSQLiteTransaction对象传递给我的代码中的每个方法都会有很多重写努力,更不用说代码了看起来更乱。有什么建议吗?

0 个答案:

没有答案