1.1.1 数据库锁定错误
SQLite Error 5: 'database is locked'
1.1.1.1 概述
发生这个错误常见的一种原因是:数据库访问我们使用了多个上下文,并且不同的上下文环境嵌套使用。如下代码所示:
1.1.1.2 原因分析
不同的数据库上下文嵌套使用,有一个上下文使用了事务,而在这个事务中,又使用了另外了一个数据库上下文访问相同的库。
上面这个截图中的代码,DeleteAudioAndGetTheirIds使用的是Dapper,而它被EF的事务上下文所包裹。所以当运行这段代码时,必然发生数据库锁定错误。
1.1.1.3 解决方案
统一数据库上下文访问环境
1.1.1.4 总结
之后需要注意这种多上下文互相嵌套访问的情况。因为,单从代码的逻辑上是没有问题的。这就给我们定位错误带来一定的困难。