一起使用 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 通过异步连接可用。
我假设连接内部有一些内部缓存或其他东西......
问题
如何正确使用一个数据库文件和两个(同步和异步)连接?
还有..我可以吗?
附加信息
- 同步和异步API将被锁完全覆盖。所以我希望同时使用 API 不会有冲突。
多个SQLite进程可以同时访问数据库。
无需担心写访问,因为每当您使用其中一个连接进行写入时,该对象都会在短时间内锁定数据库。
您的 "out of sync" 问题可能来自 Write Ahead Logging 选项在默认情况下被禁用。
要激活它,只需将以下段附加到您的连接字符串:
;PRAGMA journal_mode=WAL;
这应该允许并发读写访问,同时您慢慢移动到新的异步 API。
除此之外,还请启用 Shared Cache 选项以在您的实例之间共享相同的数据缓存。
请使用以下命令激活它:
PRAGMA cache=shared
给出
我使用 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 通过异步连接可用。 我假设连接内部有一些内部缓存或其他东西......
问题
如何正确使用一个数据库文件和两个(同步和异步)连接?
还有..我可以吗?
附加信息
- 同步和异步API将被锁完全覆盖。所以我希望同时使用 API 不会有冲突。
多个SQLite进程可以同时访问数据库。
无需担心写访问,因为每当您使用其中一个连接进行写入时,该对象都会在短时间内锁定数据库。
您的 "out of sync" 问题可能来自 Write Ahead Logging 选项在默认情况下被禁用。
要激活它,只需将以下段附加到您的连接字符串:
;PRAGMA journal_mode=WAL;
这应该允许并发读写访问,同时您慢慢移动到新的异步 API。
除此之外,还请启用 Shared Cache 选项以在您的实例之间共享相同的数据缓存。 请使用以下命令激活它:
PRAGMA cache=shared