0

给定

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

我需要的

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

问题

旧的同步 API 足够大,我无法快速迁移到异步 API,因此我需要使用一个数据库文件同时使用同步和异步 API,如下所示:

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

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

问题

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

附加信息

  • 同步和异步 API 将被锁完全覆盖。所以我希望同时使用这两个 API 不会发生冲突。
4

1 回答 1

1

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

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

您的“不同步”问题可能来自默认情况下禁用的预写日志选项。

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

;PRAGMA journal_mode=WAL;

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

最重要的是,还请启用共享缓存选项以在您的实例之间共享相同的数据缓存。请使用以下命令激活它:

PRAGMA cache=shared
于 2020-02-04T08:56:46.450 回答