【问题标题】:SQLite File version compatibility within an application应用程序中的 SQLite 文件版本兼容性
【发布时间】:2012-11-23 02:24:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# json entity-framework sqlite serialization


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 2011-04-13
      • 2016-03-14
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多