我们在Windows商店中发布了Windows 8.1通用应用程序。由于需求变更,我们现在需要向现有表中添加一些字段。我们已将SQLite用于Windows运行时(Windows 8.1)和SQLite用于Windows Phone 8.1。现在,如果我们在现有表中添加一些新字段(通过更新模型类),那么在现有用户更新应用程序时会引起任何问题吗?
如果我们创建新表,而不是添加新列,那么会导致任何问题还是比添加新字段更安全?
答案 0 :(得分:2)
即使使用现有的SQLite数据库,向现有表中添加新列也是绝对安全的。创建新表也是如此。具体过程取决于您使用的是哪个SQLite库。
如果直接使用SQL查询来查询数据库,则将使用ALTER TABLE ... ADD COLUMN
查询。如果您使用的是sqlite-net-pcl
之类的库,则在运行CreateTable
方法时可以立即获得自动迁移。正如documentation所说:
当前,自动迁移仅支持添加新列。如果您的类具有不与表中的列相关联的新属性,则将执行alter table ... add column命令使数据库保持最新状态。这些新列将没有默认值,因此将为null。
更改模型时,请始终对数据库的先前版本进行测试。这可以通过两种方式完成:
C:\Users\[UserName]\AppData\Local\Packages
。在这里导航到Packages
,然后找到应用程序的包文件夹。进入LocalState
数据库,在其中找到sqlite
数据库。将其复制到某处,卸载商店版本,然后启动新版本进行调试,并将断点放置在App.xaml.cs
构造函数中。当调试器在那里停止时,将原始数据库复制回到应用程序包LocalState
文件夹中的相同位置,然后继续进行调试。观察数据库是否正确迁移。