为 Windows Phone 8.1(通用)更新本地数据库应用程序

Updating a local database app for Windows Phone 8.1 (Universal)

我在 Windows Phone(通用)应用程序中使用本地数据库 (SQLite)。我需要为我的应用推送更新。

我的问题是'我有一点架构更改(向数据库添加了一个额外的字段)。我正在使用的包装器也会处理此更改 (https://github.com/praeclarum/sqlite-net)。或者我是否需要编写任何额外的代码来更新模式而不丢失数据。

我找到了这个 link。但这是否适用于 Windows Phone 使用上述 SQLite 包装器的通用应用程序。

这取决于您进行的更新类型。

如果您查看 the code for the library you're using,您会注意到 CreateTable 方法通过调用 MigrateTable 进行迁移。此 MigrateTable 方法只是检查是否有任何需要添加的新列,然后将它们添加到 table。

foreach (var p in map.Columns) {
    var found = false;
    foreach (var c in existingCols) {
        found = (string.Compare (p.Name, c.Name, StringComparison.OrdinalIgnoreCase) == 0);
//and so on

因此,如果您只想添加新列而不用担心键和约束,那么库应该包含这些内容。 毕竟,您可以通过创建初始数据库和所有 table 轻松测试它,然后模拟更新。

现在,对于更复杂的场景,没有像 LINQ to SQL 这样的 DatabaseSchemaUpdater 这样的东西,所以您必须在您的数据库中使用另一个 table称为(例如)_version,它将保存当前数据库版本,然后您将根据当前版本以及您尝试将数据库更新到的版本进行模式更新。