2016-07-12 4 views
0

Azure Microsoft.Azure.Documents.Documentクラスから継承したドキュメントがあります。これは自分のプロパティの構造です。変更を保存しないDocumentDBでのドキュメントの置換

[JsonProperty("name")] 
public string Name { get; set; } 

[JsonProperty("establishment")] 
public string Establishment { get; set; } 

[JsonProperty("description")] 
public string Description { get; set; } 

ドキュメントを正常に保存できますが、ドキュメントを更新して置き換えるときに問題が発生しています。

たとえば、次のようにすると、ドキュメントの説明が更新されません。

var project = documentRepository.FindById<ProjectDocument>("7fc2899e-4c7f-4c09-9f60-4ca28caca750"); 
project.Description = "Foo"; 
await documentRepository.Save(project); 

ただし、これを行うとします。

var project = documentRepository.FindById<ProjectDocument>("7fc2899e-4c7f-4c09-9f60-4ca28caca750"); 
project.SetPropertyValue("description", "Foo"); 
await documentRepository.Save(project); 

明らかに、私は不必要と思われるので、これを行う必要はありません。

Documentalという独自のライブラリを使用してリポジトリパターンを使用していますが、基本的なコードはAzure DocumentDBライブラリを呼び出すだけであり、DocumentDBライブラリを直接使用する場合は同じ問題があります。

更新:オブジェクトのランタイムビューには、変更されたフィールドの正しい値が含まれていますが、SetPropertyValueメソッドを使用しない限り、オブジェクトの動的ビューには常に元の値が含まれます。

+0

ReplaceDocumentAsyncメソッドを試しましたか? https://msdn.microsoft.com/library/azure/microsoft.azure.documents.client.documentclient.replacedocumentasync.aspx – Aravind

+0

ええ、私のライブラリはReplaceDocumentAsyncの呼び出しに使用されていましたが、その後UpsertDocumentAsync(https:// github .com/tomeglenn/documental/blob/develop/Documental/Core/DocumentRepository.cs#L75) しかし、私もdocumentClient.ReplaceDocumentAsync(document)を使って直接試しましたが、同じ問題が発生します。 –

+0

あなたはこの問題にぶつかっていますか? https://github.com/Azure/azure-documentdb-dotnet/issues/132また、実際のアップデートは機能ではなく、ドキュメントの置換だけが内部で行われていますhttps://feedback.azure.com/forums/263030-documentdb/suggestions/6693091-be-able-to-do-partial-updates-on-document – Aravind

答えて

0

Githubの記事で、Documentからクラスを拡張するときにバグがあるようだと言いました。基本クラスとしてResourceから拡張してください。すべてうまくいくはずです。その後、docLinkと更新されたオブジェクトを受け入れるReplaceDocumentAsyncのために、他のオーバーロードを使用する必要があります。

それがあなたに役立つかどうか教えてください。

0

コード内で **upsert**を使用することができます。これは文書db APIで使用できます。これにより、すべての汚い作業が行われ、文書が置き換えられます。あなたは詳細を見つけるhere

+0

これを掲載した時点で、それはうまくいかなかった。彼の答えで@rajeshが述べたように、Documentクラスを継承するとバグがありました。 –

+0

私は私のプロジェクトでこれを使用しています。あなたのアプリを更新するときに、もう一度やり直したいかもしれません。 –

関連する問題