我在Windows Phone(通用)应用程序中使用本地数据库(SQLite)。我需要为我的应用推送更新。
我的问题是“我做了一点模式更改(向数据库添加了一个额外的字段)。我正在使用的包装程序将处理此更改(https://github.com/praeclarum/sqlite-net)。还是我需要编写任何额外的代码来更新架构而不丢失数据。
我找到了这个链接。但这是否适用于使用上述SQLite包装器的Windows Phone通用应用程序。
这取决于您正在执行的更新类型。
如果您查看正在使用的库的代码,则会注意到该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
因此,如果您只想添加新列而不必担心键和约束,那么库应该将其涵盖在内。毕竟,您可以通过创建初始数据库和所有表来进行轻松测试,然后模拟更新。
现在,对于更复杂的场景,没有DatabaseSchemaUpdater
LINQ to SQL那样的东西,因此您必须在数据库中使用另一个表(例如)_version
,该表将保存当前数据库版本,然后您将执行此操作模式会根据当前版本以及您要将数据库更新到的版本进行更新。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句