SQLite-Net Extensions - CreateTable 函数是否会改变我现有的表?

SQLite-Net Extensions - Does the CreateTable function alter my existing tables?

我将 SQLite-net 与 TwinCoders NuGet 一起用于 MvvmCross Xamarin 项目中的扩展方法。我想让数据库保持更新,即使我将来会修改模型。

我的问题是:如果我使用 CreateTable 函数基于模型创建 SQLite table,并且数据库已经存在于 tablet/phone 上,但它具有不同的结构(假设table 缺少在上次更新中添加的列),此函数会改变现有的 table 吗?谢谢!

对我来说,答案一直是肯定的。我更改了模型中其中一个属性的名称,最终将数据保留在原位,并且每个现有记录都有新的 属性 但它是空的。

所以它是这样的:

原文:

class Model {
    int Id { get; set; }
    string Date { get; set; }
}

已更改:

class Model {
    int Id { get; set; }
    string Dates { get; set; }
}

现在所有的记录仍然有 Id 值并且没有被删除,但它们也都有空的 Dates 列,正如预期的那样。

不用说,一个新的table没有创建。

编辑:另请注意,我只使用 SQLite-Net,没有扩展库或其他任何东西,但最终结果应该是相同的。

感谢您的回答! SQLite-Net 确实实现了自动迁移。它将 SQLite 中缺少 "ALTER DROP COLUMN" 和 "ALTER RENAME COLUMN" 命令的情况处理如下:

  • 如果更改了一个列的名称,则将使用新名称创建一个新列,查询将忽略旧列
  • 如果该列被删除,那么它将保留在数据库中,但查询将忽略它

我还没有尝试更改一列(属性)的数据类型时会发生什么,但我希望在我们的项目中不会出现这种情况。