【问题标题】:Updating a local database app for Windows Phone 8.1 (Universal)为 Windows Phone 8.1(通用)更新本地数据库应用程序
【发布时间】:2015-03-29 02:25:03
【问题描述】:
我在我的 Windows Phone(通用)应用程序中使用本地数据库 (SQLite)。我需要为我的应用推送更新。
我的问题是“我有一点架构更改(向数据库添加了一个额外的字段)。我正在使用的包装器 (https://github.com/praeclarum/sqlite-net) 也会处理此更改。或者我是否需要编写任何额外的代码来更新架构而不丢失数据。
我找到了这个link。但这是否适用于使用上述 SQLite 包装器的 Windows Phone 通用应用程序。
【问题讨论】:
标签:
sqlite
windows-phone-8.1
【解决方案1】:
这取决于您正在进行哪种更新。
如果您查看the code for the library you're using,您会注意到CreateTable 方法通过调用MigrateTable 进行迁移。这个MigrateTable 方法只是检查是否有任何需要添加的新列,然后将它们添加到表中。
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
因此,如果您只想添加新列而不用担心键和约束,那么库应该涵盖这一点。
毕竟,您可以通过创建初始数据库和所有表来轻松测试这一点,然后模拟更新。
现在,对于更复杂的场景,没有像 LINQ to SQL 那样的 DatabaseSchemaUpdater 这样的东西,因此您必须在数据库中使用另一个名为(例如)_version 的表,它将保存当前数据库版本,然后您将根据当前版本以及您尝试将数据库更新到的版本进行架构更新。