2012-12-05 33 views
2

我有一個C#.NET應用程序(一種複雜的計算應用程序),用戶在其中輸入數據,處理後的信息使用JSON序列化和EF保存到SQLite文件中。如果需要,也可以將其加載到我們的應用程序中。SQLite應用程序內的文件版本兼容性

該應用程序在開發過程中經歷了很多變化,並且類也被修改。所以以前保存在SQLite文件中的序列化對象與新的不同。

我想爲舊文件提供兼容性,以便可以在新應用程序中打開它。

簡而言之,將bool作爲成員的.NET類「class XYZ」使用JSON序列化並保存爲SQLite文件中的BLOB。後來在更新版本的應用程序中,「類XYZ」的bool成員被修改爲int。如何使用bool類型將以前保存的文件反序列化到新的應用程序中?

SQLite表結構在版本中也有變化。如何在.NET中實現這一點?

回答

2

這是一個很常見的問題,我不認爲這是C#語言。 It've看到實現這種版本化的方法有兩種:

  1. 只有一個INTEGER保持僅一排(從而模擬數據庫變量)包含數據庫和結構模式兩者的版本列創建一個表。隨着每個模式更改,您都會增加與其關聯的版本。對於每個新版本,您編寫升級語句和函數以獲取原始JSON對象(由於它們不兼容而未轉換爲類實例),更新,刪除和創建已更改的結構字段。然後,將轉換後的結構寫入升級後的模式。我已經做了好幾次,當然,這很乏味,你必須要一絲不苟,但這是做這件事的唯一可靠方法(我知道)。
  2. 使用一個庫,如Protocol Buffer支持結構變化(當然有限)。這樣的庫可以幫助您進行結構更改,但不會影響數據庫模式更改 - 無論採用哪種方式,您都可能需要維護提及的具有模式版本的單元表,並在出現較低數字時升級它。