0

コレスポンデントコレクションに古いドキュメントが含まれている間にc#モデルが更新されたとしましょう。コレクション内で古いドキュメントと新しいドキュメントを共存させ、新しいバージョンのc#モデルのみを使用してそれらを読み取ります。できれば継承を使わないようにしたいと思います。したがって、この問題のどれが解決可能であり、どのように解決できるのだろうか。

  • データベースに存在しないc#モデルに新しいプロパティがあります。私はそれが問題になることは決してないと思います、Mongoはそれについて何も知りません、そしてそれはデフォルト値で初期化されます。ここでの唯一の問題は、すべての古いドキュメントに対して特定の値で初期化することです。

  • プロパティの1つがモデルから削除されました。MongoDbに、古いドキュメントのフィールドをマップするc#クラスにこれ以上のプロパティがないことを確認し、クラッシュする代わりにそれを無視するようにします。このシナリオは、データベースにゴミが残っていることを意味するため、おそらく少し奇妙に聞こえますが、とにかく、動作を実装/構成することは可能ですか?

  • タイプが変更された場合、新しいタイプは整数->文字列のように古いタイプに変換できます。古いドキュメントのマッピングを構成する方法はありますか?

それ以外の方法で解決できない場合は、2番目のケースに継承を使用することを検討できます

4

1 に答える 1

2

あなたの質問に対する答えのほとんどはここにあります。

  • BsonDefaultValue("abc")データベースに存在しない値を処理し、逆シリアル化時にデフォルト値を与えるためのプロパティの属性
  • BsonIgnoreExtraElements逆シリアル化中に見つかった余分な要素を無視するクラスの属性(例外を回避するため)
  • メンバーのタイプが変更された場合、またはデータを修正するためのアップグレードスクリプトを作成する必要がある場合は、カスタムシリアライザーが処理する必要があります。必要に応じて、int負荷をかけたままにしておく方がおそらく簡単でしょう。(つまり、プロパティのバージョンに新しいプロパティ名が必要になります。)savestringstring
于 2013-01-18T01:17:47.777 に答える