2

ユーザーがデータを入力し、処理された情報がJSONシリアル化とEFを使用してSQLiteファイルに保存されるC#.NETアプリケーション(一種の複雑な計算アプリ)があります。必要に応じて、同じものをアプリケーションにロードできます。

アプリケーションは開発中に多くの変更が加えられ、クラスも変更されます。そのため、SQLiteファイルに以前に保存されたシリアル化されたオブジェクトは新しいものとは異なります。

新しいアプリケーションで開くことができるように、古いファイルに互換性を提供したいと思います。

簡単に言うと、boolをメンバーとする.NETクラス「classXYZ」は、JSONを使用してシリアル化され、SQLiteファイルにBLOBとして保存されます。その後、新しいバージョンのアプリで、「クラスXYZ」のboolメンバーがintとして変更されます。以前に保存したブール型のファイルを新しいアプリに逆シリアル化する方法は?

バージョン全体でSQLiteテーブル構造にも変更があります。.NETでこれを実現する方法は?

4

1 に答える 1

2

これはかなり一般的な問題であり、C#言語に縛られていないと思います。このようなバージョン管理を実現する方法は2つあります。

  1. INTEGERデータベースと構造スキーマの両方のバージョンを含む1行のみを保持する(したがってデータベース変数をシミュレートする)1列のみのテーブルを作成します。スキーマを変更するたびに、それに関連付けられているバージョンを増やします。新しいバージョンごとに、生のJSONオブジェクト(互換性がないためクラスインスタンスに変換されない)をフェッチし、変更された構造フィールドを更新、削除、作成するアップグレードステートメントと関数を記述します。次に、変換された構造をアップグレードされたスキーマに書き込みます。私はそれを何度もやったことがありますが、それはかなり退屈で、細心の注意を払う必要がありますが、それが(私が知っている)それを行う唯一の信頼できる方法です。
  2. 構造変更をサポートするProtocolBufferなどのライブラリを使用します(もちろん制限付き)。このようなライブラリは、構造の変更には役立ちますが、データベーススキーマの変更には役立ちません。どちらの方法でも、前述の1セルテーブルをスキーマバージョンで維持し、数値が少なくなるたびにアップグレードする必要があります。
于 2012-12-05T10:08:18.320 に答える