一起使用 SQLiteConnection 和 SQLiteAsyncConnection

Use SQLiteConnection and SQLiteAsyncConnection together

给出

我使用 SQLite-Net NuGet 包。
我有旧的同步 API 用于数据库操作 (SQLiteConnection)。

我需要什么

我想使用新的异步 API 进行数据库操作 (SQLiteAsyncConnection)

问题

旧的同步 API 足够大,我无法快速迁移到异步 API,所以我需要使用一个数据库文件同时使用同步和异步 API ,像这样:

var database = new SQLiteConnection(connectionString); // Synchronous API
var databaseAsync = new SQLiteAsyncConnection(connectionString); // Asynchronous API

如果我尝试像上面那样在一个数据库文件上使用两个连接,我会遇到不同步的问题,例如使用同步连接创建 table 不会使 table 通过异步连接可用。 我假设连接内部有一些内部缓存或其他东西......

问题

如何正确使用一个数据库文件和两个(同步和异步)连接?
还有..我可以吗?

附加信息

多个SQLite进程可以同时访问数据库。

无需担心写访问,因为每当您使用其中一个连接进行写入时,该对象都会在短时间内锁定数据库。

您的 "out of sync" 问题可能来自 Write Ahead Logging 选项在默认情况下被禁用。

要激活它,只需将以下段附加到您的连接字符串:

;PRAGMA journal_mode=WAL;

这应该允许并发读写访问,同时您慢慢移动到新的异步 API。

除此之外,还请启用 Shared Cache 选项以在您的实例之间共享相同的数据缓存。 请使用以下命令激活它:

PRAGMA cache=shared