应用程序中的SQLite文件版本兼容性

我有一个C#.NET应用程序(一种复杂的计算应用程序),其中用户输入数据,处理后的信息使用JSON序列化和EF保存到SQLite文件中。 必要时可以将相同内容加载到我们的应用程序中。

应用程序在开发过程中经历了很多变化,并且类也被修改。 因此,以前在SQLite文件中保存的序列化对象与较新的序列化对象不同。

我想为旧文件提供兼容性,以便可以在新应用程序中打开它。

简单来说,使用JOL将带有bool作为成员的.NET类“类XYZ”序列化,并在SQLite文件中保存为BLOB。 稍后在较新版本的app中,“类XYZ”的bool成员被修改为int。 如何使用bool类型将以前保存的文件反序列化到新的应用程序中?

在整个版本中,SQLite表结构也有变化。 如何在.NET中实现这一目标?

这是一个非常常见的问题,我认为不是C#语言的约束。 它已经看到了两种实现这种版本控制的方法:

  1. 创建一个只有一个INTEGER列的表,该列只包含一行(因此模拟数据库变量),其中包含数据库和结构模式的版本。 每次更改架构时,都会增加与之关联的版本。 对于每个新版本,您编写升级语句和函数来获取原始JSON对象(未转换为类实例,因为它们不兼容),更新,删除和创建更改的结构字段。 然后将转换后的结构写入升级的模式。 我已经多次完成它,当然,它非常繁琐,你必须一丝不苟,但这几乎是唯一可行的方法(我知道)。
  2. 使用协议缓冲区等库,它支持结构更改(当然有限)。 这样的库可以帮助您进行结构更改,但不能帮助您更改数据库模式 – 无论哪种方式,您可能必须维护提到的带有模式版本的单元表,并在看到较低的数字时进行升级。