Windows 通用现有应用向 SQLite 添加新列 table

Windows Universal existing app add new columns to SQLite table

我们在 Windows 商店发布了一个 Windows 8.1 通用应用程序。由于需求变更,现在我们需要向现有 table 添加一些字段。我们已将 SQLite 用于 Windows 运行时 (Windows 8.1) 并将 SQLite 用于 Windows Phone 8.1。现在,如果我们向现有 table 添加一些新字段(通过更新模型 类),当现有用户更新应用程序时是否会导致任何问题?

如果我们创建一个新的 table 而不是添加新的列,那么这会导致任何问题吗?还是会比添加新的字段更安全?

即使使用现有的 SQLite 数据库,向现有 table 添加新列也是绝对安全的。创建一个新的 table 也是如此。具体过程取决于您使用的 SQLite 库。

如果您直接使用 SQL 查询查询数据库,那么您将使用 ALTER TABLE ... ADD COLUMN 查询。如果您正在使用像 sqlite-net-pcl 这样的库,那么当您 运行 CreateTable 方法时,您会立即获得自动迁移。正如 documentation 所说:

The automatic migration, currently, only supports adding new columns. If your classes have new properties that are not associated with columns in the table, then alter table ... add column commands will be executed to bring the database up to date. These new columns will not have default values and will therefore be null.

提示

更改模型时,请始终针对数据库的先前版本测试更改。这可以通过两种方式完成:

  • 从商店安装现有版本,启动应用程序并使用它,以便它包含一些数据,然后关闭它并转到 C:\Users\[UserName]\AppData\Local\Packages。在这里导航到 Packages 并在那里找到您的应用程序包文件夹。在内部转到 LocalState,您应该在其中找到 sqlite 数据库。将其复制到某处,卸载 Store 版本并启动新版本进行调试,并在 App.xaml.cs 构造函数中放置一个断点。当调试器停在那里时,将原始数据库复制回应用程序包 LocalState 文件夹中的相同位置并继续调试。观察数据库是否正常迁移
  • 使用 Git 源代码控制,进入历史记录到上一个版本提交,安装应用程序进行调试,用一些数据填充数据库,关闭应用程序。现在转到最新的提交并再次启动应用程序进行调试。验证迁移是否有效。