7

UniqueConstraintsバンドルを使用するOrganizationという名前のエンティティがあります。UniqueConstraintで自動生成されたIDであるNetNameという名前のプロパティがあります。

これは不要なので、代わりにNetNameプロパティをIdとして使用します。そのため、UniqueConstraintsが一意であることを知る必要がなく、NetNameがあるときにLoadを使用できるという利点も得られます。

ネット名をIDとして使用する前に少しクリーンアップする必要があったため、次の値を保持するTempUniqueNetNameという新しい一時プロパティを作成しました。

"organizations/"+ CleanupId(this.NetName)

これで、その値をIDに移動する準備が整いました。しかし、それを機能させることはできません。私たちの問題は、以下のPatchRequestを使用すると、データベースにIdという名前の新しいプロパティが作成されますが、実際のIdは同じ値のままであるということです(スクリーンショットを参照)。Idの値を変更するためのより良い(正しい)方法はありますか?

エンティティ:

class Organization {
   public string Id { get; set; }

   [UniqueConstraint]
   public string NetName { get; set; }

   public string TempUniqueNetName{ get; set; }
}

次のようなことをしたいと思います。

_documentStore.DatabaseCommands.UpdateByIndex(typeof(Organizations).Name,
            new IndexQuery(),
            new[]
                    {
                        new PatchRequest()
                            {
                                Type = PatchCommandType.Rename,
                                Name = "TempUniqueNetName",
                                Value = new RavenJValue("Id")
                            }
                    });

値は変更されていません

4

2 に答える 2

6

パッチを適用してドキュメントキーを変更することはできないと思います。実際にはドキュメントやメタデータと一緒に保存されません。ロード時に@idメタデータにコピーされて、そこにあるように見せかけます。Ravenクライアントは、ドキュメント内の独自のIDプロパティに再度コピーします。しかし実際には、これは基礎となるesentドキュメントストアの個別の値です。レイヴンはこれをどのように処理し、あなたのために偽造するかを具体的に知っている必要があります。

ドキュメントを古いIDから新しいIDに手動でコピーして古いIDを削除することもできますが、これには時間がかかる可能性があります。

現在、ドキュメントキーの名前を変更するための優れた答えはありません。実際には、単一のドキュメントのキーを再生成するためのDatabaseCommandが必要であり、パッチを適用するときにキーを再生成するためにPatchCommandTypeを分離する必要があります。おそらく、これは将来レイヴンに追加されるでしょう。

于 2013-01-03T15:49:54.283 に答える
1

githubリポジトリでIDを更新するためのPUT-DELETEの使用法の実装を確認できます。次のようになります。

store.DatabaseCommands.Put(updatedKey, null, document.DataAsJson, newMetadata);
store.DatabaseCommands.Delete(oldKey, null);

https://github.com/Sevsoad/SagaUpdater/

また、Ravenのドキュメントもあります。

https://ravendb.net/docs/article-page/3.0/csharp/client-api/commands/documents/put

于 2016-09-01T11:09:05.700 に答える