6

我有一个问题,当我发布我的应用程序的新版本时,如果我向我的一个数据库表添加一个新列,数据库不会更新。任何人都知道如何创建升级版本的脚本,以防有新列或新表?

谢谢

4

3 回答 3

3

这不是脚本的问题,因为没有这样的事情。您可以发布一个带有“补丁”的版本,该版本将运行一次,将所有记录提取到临时表单 -> 删除表 -> 再次创建它(将确保它是使用新列创建的,依此类推) -> 重新插入再次记录。一段时间后,当您知道所有用户(或无论何时设置限制)都已移至较新版本时,您可以从代码中删除“补丁”。

希望能帮助到你。

于 2014-12-03T11:30:49.117 回答
3

您必须记住 CreateTable 它已经在为您更新列,因为它在内部调用了一个名为MigrateTable的方法。

但是,您可能必须对数据库进行更高级的修改,例如添加触发器或类似的东西。在这种情况下,我建议您手动执行修改。

在 Xamarin 表单中,我最终得到了这个: https ://gist.github.com/matpag/b2545cc22c8e22449cd7eaf6b4910396

不可能是有史以来最好的策略,但似乎对我有用。

总结
您必须将数据库版本保存在名为 user_version 的 SQlite 数据库的内部标志中,该标志可通过 PRAGMA 关键字访问。每次获取数据库连接时,都要进行检查,看看当前数据库版本是否与应用程序上一个数据库版本相同。如果不是,您需要执行数据库更新并设置新的当前版本。

于 2016-04-15T09:34:03.717 回答
1

自动迁移功能在sqlite.net-pcl中仍然不起作用,但看起来它在另一个 sqlite 包中起作用:sqlite-net-pcl,这实际上是 Xamarin 推荐的 sqlite 包。

于 2016-09-19T20:22:32.480 回答