2013-01-03 10 views
5

UniqueConstraints-bundleを使用するOrganizationという名前のエンティティがあります。 UniqueConstraintと自動生成されたIDであるNetNameという名前のプロパティがあります。RavenDBのIdの値を変更する

これは不必要なので、代わりにNetName-propertyをIdとして使用します。 UniqueConstraintsがユニークであることを知る必要はなく、NetNameがあるときにLoadを使用できるという利点も得られます。

私たちは、私たちは今の値を保持TempUniqueNetNameと呼ばれる新しい一時的な財産作成ビットIDとしてそれを使用する前に、当社のネット名をクリーンアップするために必要な:だから私たちは今、単純に準備ができている

"organizations/"+ CleanupId(this.NetName) 

をその価値を私たちのIDに移してください。しかし、私たちはそれを働かせることはできません。私たちの問題は、以下のPatchRequestでは、データベースにIdという名前の新しいプロパティが追加されますが、acctual Idは同じ値を保持しています(スクリーンショット参照)。 IDの値を変更する方が良い(正しい)方法はありますか?

エンティティ:私はあなたがパッチ適用を介した文書キーを変更することができるとは思わない

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

Value has not changed

答えて

5

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

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

    public string TempUniqueNetName{ get; set; } 
} 

私たちは、このような何かをしたいです。実際にはドキュメントやメタデータには格納されていません。ロード時に@idメタデータにコピーされ、そこに存在すると思われるため、Raven Clientはドキュメント内の独自のIDプロパティに再度コピーします。しかし、実際には、それは基本的なesentドキュメントストアの別個の価値です。レイヴンは、これをどう扱うべきかを細かく知っていなければならず、あなたのためにそれを偽造する必要があります

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

今すぐドキュメントキーの名前を変更するための素晴らしい答えはありません。単一のドキュメントを再キーイングするためのDatabaseCommandがあり、パッチ適用時にPatchCommandTypeを別のキーに戻す必要があります。多分これは将来のカラスに加えられるでしょう。

+0

はここに要求を掲示される:http://issues.hibernatingrhinos.com/issue/RavenDB-801 –

+0

あなたのお返事ありがとうございます。私たちはあなたの提案を使用し、文書をコピーします。私はそれがしばらく時間がかかることは関係ありませんので、一度のことです。うまくいけば、次回のときにこれが必要になるでしょう。 –

+1

FYI:RavenDBの開発者は、この機能を追加するつもりはないと答えました。 " –

1

私のgithubリポジトリのIDを更新するために、PUT-DELETEの使用法をチェックすることができます。 それはこのようなものになります。また、ここで

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

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

をいくつかレイヴンのドキュメントです:

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

関連する問題