現在、Simple.DataとMongoDbアダプタを使用しています。私たちは、ドキュメントを検索したら、私たちは、例えば、POCOにそれをキャストしていない:Simple.DataでMongoDbコレクションのデータ構造を変更する方法を教えてください。
(User)db.Users.FindById(1234);
は、まず、これは非常にうまく機能(一体ええ、何のスキーマを!)。ただし、Userオブジェクトの構造を変更したり(たとえば、新しいフィールドを追加したり、フィールドのデータタイプを変更するなど)、新しいクラス構造と一致しないため、元のドキュメントをキャストできなくなります。これを解決するには
は、我々はこれまでに二つの最も率直なアプローチを試してみた:
- マニュアルデータの更新を文書構造の変化を反映します。現在のところOkですが、プロジェクトが複数の環境にまたがって展開されている場合は管理できません/生産に移す
- 手動マッピング。例えば。 SimpleRecordを辞書にキャスティングし、メンバを手動で評価します。私はこのアプローチのパフォーマンスについて懸念していますが、まだベンチマークしていません。私はまた、宛先タイプのリフレクションを使用してメンバー名を特定しないで汎用的にする方法を見つけていないことに懸念しています。
これは、RubyとPythonで解決されました。前者はより多くをアピールします(Mingの古いスキーマバージョンの維持管理は過度なことかもしれません)。
私は逃げ出して何か狂ったようにする前に、Simple.Dataでこの問題を解決した人は誰ですか?スキーマレスデータベースの文書構造の変更を処理するためのベストプラクティスに関する指針を誰でも提供できますか?
非常に多くのことがコンストラクタのシナリオに依存しますが、mongoでは「これはどうやってやったのですか」という方法はありませんので、いくつかのユースケースは便利です。 –
@Hohhiほとんどの場合、フィールドの追加やデータ型の変更が行われています。文書 'public List Activities'に新しいフィールドを追加するか、タイプを変更します。' public int SomeValue'は 'public string SomeValue'になります。現時点で開発者は2人しかいないので、これを管理するのは大丈夫でしたが、開発者が増え、ビルドが増えると、頭痛を引き起こすようです。私が見る限り、古いデータを変更したり、データの変更を無視するようにマッピングしたりするケースがありますが、これを比較的シームレスにする方法についてはあまり明確ではありません。急速な変化... –