我遇到的问题是,当我发布我的应用程序的新版本时,如果我向其中一个db表添加新列,则数据库不会更新。如果有新列或新表,任何人都知道如何创建升级版本的脚本吗?
由于
答案 0 :(得分:3)
这不是一个脚本的问题,因为没有这样的事情。您可以发布一个版本,其中“补丁”将运行一次,将您的所有记录提取到临时表单 - >删除表格 - >再次创建它(将确保使用新列创建它等) - >再次重新插入记录。过了一段时间,当您知道所有用户(或设置限制时)已移至较新版本时,您可以从代码中删除“补丁”。
希望它有所帮助。
答案 1 :(得分:1)
自动迁移功能仍无法在 sqlite.net-pcl 中运行,但看起来它在其他sqlite包中可以正常工作: sqlite-net-pcl ,这实际上是Xamarin推荐的sqlite包。
答案 2 :(得分:-2)
你必须记住,CreateTable已经为你做了列更新,因为它在内部调用了一个名为MigrateTable的方法,你可以在这里看到这个方法以进一步说明:https://github.com/praeclarum/sqlite-net/blob/master/src/SQLite.cs#L562。
但是,您可能必须处理对数据库的更高级修改,例如添加触发器或类似的东西。 在这种情况下,我建议您手动执行修改。
在Xamarin Forms中,我最终得到了这个: https://gist.github.com/matpag/b2545cc22c8e22449cd7eaf6b4910396
可能不是有史以来最好的策略,但似乎对我有用。
总结 :
您必须将数据库版本保存在SQlite数据库的内部标志中,该标志名为user_version,可通过PRAGMA关键字访问。
每次获得数据库连接时,都必须执行检查并查看当前数据库版本是否与应用程序最后一个数据库版本相同。
如果不是,则需要执行数据库更新并设置新的当前版本。