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 總結
之後需要注意這種多上下文互相嵌套訪問的情況。因爲,單從代碼的邏輯上是沒有問題的。這就給我們定位錯誤帶來一定的困難。