2016-12-22 5 views
0

RavenDbに格納されているエンティティマッピングされたドキュメントがあり、 "文字列"として格納されているプロパティの1つが "DateTime"である必要があります。私のC#コードでは、私は、エンティティのプロパティを「日時」に変更したがRavenDbから同じを取得中に「プロパティの値が読み取れませんでした:{NameOfPropertyを}」ドキュメントのプロパティのデータ型を変更するには?

例外をスローしているため、dataTypeとの紛争に。同じように解決するには? "11/31/9999 11時59分59秒PM"、 "CN": "XYZ"、 "COUNTRYCODE" RavenDb

{ "Accountexpires" のバージョン3.0を使用して

: "0"、 "表示名":ヌル、 "識別名":この "Accountexpires" における基本的 }

た "CN = XYZ、OUは=ドメインコントローラ、DC = XYZは、DCは、XYZ ="エンティティ内の文字列tは "DateTime"です。これをフェッチすると、前述のようにエラーが発生します。

+0

例文はどうぞ? –

答えて

1

stringプロパティの値はDateTime値には有効ではないため、単に型を変更すると機能しません。

別のDateTimeフィールドを追加し、コレクション内のすべてのドキュメントを処理することを検討してください。ドキュメントを読み込み、Accountexpiresフィールドを解析してDateTime値を解析し、新しいフィールドに保存します。次に、追加されたDateTimeフィールドを使用するようにコードを変更します。古い文字列フィールドが不要な場合は、古い文字列フィールドを削除することができます。

それ以外の場合は、コレクション内のすべてのドキュメントを処理し、有効なRavenDB DateTime形式(9999-11-31T23:59:59.0000000)に変更してからデータ型を変更する必要があります。

スイッチが瞬間的でないという欠点として、後者のアプローチは、データが矛盾する期間があります。前者のプロセスでは、データを準備してすぐにコードを切り替えることができます。

+0

これは可能な解決策ですが、プロパティ名は同じです。私のC#のコードでは同じプロパティが新しいタイプです。同じプロパティを削除して追加することは実行可能なオプションですか?それは私が信じている文書を2回保存する必要があります。 – Sumit

+0

プロパティ名を保持する必要がある場合は、元のクラスの文字列をRavenDB DateTimeの正しい書式に変更します。すべての文書が修正されたら、データ型を文字列からDateTimeに変更して、文書を正しく読み込む必要があります。プロパティを削除/作成する必要はありません。 –

+0

マークされた答えの最初のアプローチは私の場合は適切ではなかったので、後で "IDocumentConversionListener"を実装し、 "BeforeConversionToEntity"メソッドで "ToString(" O ")"を使用して保存形式をRavenDb形式に変換しました。 – Sumit

関連する問題