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" 命令的情况处理如下:
- 如果更改了一个列的名称,则将使用新名称创建一个新列,查询将忽略旧列
- 如果该列被删除,那么它将保留在数据库中,但查询将忽略它
我还没有尝试更改一列(属性)的数据类型时会发生什么,但我希望在我们的项目中不会出现这种情况。
我将 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" 命令的情况处理如下:
- 如果更改了一个列的名称,则将使用新名称创建一个新列,查询将忽略旧列
- 如果该列被删除,那么它将保留在数据库中,但查询将忽略它
我还没有尝试更改一列(属性)的数据类型时会发生什么,但我希望在我们的项目中不会出现这种情况。