xamarin开发常见错误总结--数据库被锁定异常


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 总结

之后需要注意这种多上下文互相嵌套访问的情况。因为,单从代码的逻辑上是没有问题的。这就给我们定位错误带来一定的困难。