2

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

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

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

简单来说,一个以 bool 为成员的 .NET 类“class XYZ”使用 JSON 序列化并保存为 SQLite 文件中的 BLOB。后来在较新版本的应用程序中,“xyz 类”的 bool 成员被修改为 int。如何将之前保存的布尔类型文件反序列化到新应用程序中?

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

4

1 回答 1

2

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

  1. 创建一个只有一INTEGER列的表,该表只包含一行(从而模拟数据库变量),其中包含数据库和结构模式的版本。随着每次架构更改,您都会增加与之关联的版本。对于每个新版本,您编写升级语句和函数来获取原始 JSON 对象(未转换为类实例,因为它们不兼容)、更新、删除和创建更改的结构字段。然后将转换后的结构写入升级后的模式。我已经做过很多次了,当然,这很乏味,你必须一丝不苟,但这几乎是唯一可靠的方法(我知道)。
  2. 使用诸如Protocol Buffer之类的库,它支持结构更改(当然是有限的)。这样的库可以帮助您进行结构更改,但不能帮助您更改数据库架构 - 无论哪种方式,您都可能必须维护提到的带有架构版本的单单元表,并在看到较低数字时对其进行升级。
于 2012-12-05T10:08:18.320 回答