2013-01-18 38 views
0

假設我的c#模型已更新,而通訊錄集合仍包含舊文檔,我希望新舊文檔共同存在於集合中,而僅使用新版本的c#模型閱讀它們。如果可能,我希望不使用繼承。所以,我不知道哪本問題是可以解決的,以及如何:如何在代碼中使用新模型讀取舊版本的MongoDb文檔

  • 有在C#模型,它不存在於數據庫中的新特性。我認爲它永遠不應該成爲一個問題,Mongo對此一無所知,它將以默認值初始化。這裏唯一的問題是爲所有舊文檔初始化它,具有特殊價值,任何人都知道如何?

  • 其中一個屬性已經從模型中消失了。我希望MongoDb發現c#類中沒有更多屬性將舊文檔的字段映射到,並忽略它而不是崩潰。這種情況可能聽起來有點奇怪,因爲這意味着數據庫中會留下一些垃圾,但無論如何,這是可能實現/配置的行爲嗎?

  • 類型如果更改,新類型可轉換爲舊類型,如integer-> string。有什麼辦法可以爲舊文檔配置映射嗎?

我可以考慮用繼承的第二種情況下否則

回答

2

大多數回答您的問題被發現here這是不可解的。上屬性

  • BsonDefaultValue("abc")屬性來處理在數據庫中不存在的值,並且在反序列化給他們一個默認值
  • BsonIgnoreExtraElements屬性的類忽略反序列化過程中發現的額外的元素(以避免除外)
  • 如果成員的類型發生更改,或者您需要編寫升級腳本來修復數據,則需要使用自定義序列化程序。根據需要,將int加載,save加到string可能會更容易。 (這將意味着您需要財產string版本的新屬性名稱。)
相關問題