2

アプリケーションの一連のリファクタリングを完了したところ、不要になったプロジェクトを削除し、そのクラスを別のプロジェクトに移動しました。これの副作用はUser、RavenDB に格納されているクラスに、新しいアセンブリに移動された型のコレクション プロパティがあることです。Userクラスのセッションをクエリしようとするとすぐに、Json逆シリアル化エラーが発生します。問題はここで触れられていますが、答えは私の問題に対処していません。問題のあるプロパティは次のとおりです。

{
  "OAuthAccounts": {
    "$type": "System.Collections.ObjectModel.Collection`1[
      [Friendorsement.Contracts.Membership.IOAuthAccount, 
      Friendorsement.Contracts]], mscorlib",
    "$values": []
  },
}

OAuthAccountsUserここでマップするために使用されるコレクション プロパティです。

System.Collections.ObjectModel.Collection`1[[Friendorsement.Contracts.Membership.IOAuthAccount, Friendorsement.Contracts]]

ここにマップされます:

System.Collections.ObjectModel.Collection`1[[Friendorsement.Domain.Membership.IOAuthAccount, Friendorsement.Domain]]

Friendorsement.Contractsもはや存在しない。そのすべてのタイプが現在Friendorsement.Domain

使用してみましstore.DatabaseCommands.StartsWith("User", "", 0, 128)たが、何も返されませんでした。

私は見ようとしましUpdateByIndexたが、あまりうまくいきませんでした:

store.DatabaseCommands.UpdateByIndex("Raven/DocumentsByEntityName",
    new IndexQuery {Query = "Tag:Users"},
        new[]
        {
            new PatchRequest { // unsure what to set here }
        });

Raven 2.0を使用しています

4

3 に答える 3

0

私はこれをやってしまった:

Advanced.DatabaseCommands.UpdateByIndex(
    "Raven/DocumentsByEntityName",
        new IndexQuery {Query = "Tag:Album"},
        new []{ new PatchRequest() { 
            Type = PatchCommandType.Modify, 
            Name = "@metadata", 
            Nested= new []{ 
                new PatchRequest{
                    Name= "Raven-Clr-Type",
                    Type = PatchCommandType.Set,
                    Value = "Core.Model.Album, Core" }}}},
        false);
于 2014-02-20T22:27:33.943 に答える
0

考えられる解決策は次の 2 つです。

オプション 1: プロジェクトの状態に応じて、たとえばまだ開発中の場合は、Raven Studio から RavenDB からそのコレクションを簡単に削除し、それらすべてのユーザー ドキュメントを再作成することができます。すべての新しいユーザー ドキュメントは、正しいクラス名とアセンブリを持つ必要があり、正しく逆シリアル化する必要があります。明らかに、すでに本番環境にある場合、これはおそらく適切なオプションではありません。

オプション 2: ユーザー ドキュメントの数に応じて、各ドキュメントを手動で編集して正しい C# クラス名とアセンブリを指定し、正しく逆シリアル化できるようにする必要があります。繰り返しますが、手動で変更するオブジェクトが多すぎる場合、これは適切なオプションではない可能性があります。ただし、数が少ない場合は、それぞれを開いてメタデータ タブに移動し、「Raven-Entity-Name」と「Raven-Clr-Type」の正しい値を貼り付けても問題ありません。

于 2013-11-15T15:37:45.123 に答える