我在Windows Phone(通用)应用中使用本地数据库(SQLite)。我需要为我的应用推送更新。
我的问题是'我有一点模式更改(向数据库添加了一个额外的字段)。因此,我正在使用的包装器处理此更改(https://github.com/praeclarum/sqlite-net)。或者我是否需要编写任何额外的代码来更新架构而不会丢失数据。
我发现了link。但是这适用于使用上述SQLite包装器的Windows Phone通用应用程序。
答案 0 :(得分: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
的表。它将保存当前数据库版本,然后您将根据当前版本的内容以及您尝试将数据库更新到的版本进行架构更新。