替换DocumentDB中的文档而不保存更改

时间:2016-07-12 08:49:09

标签: c# azure azure-cosmosdb nosql

我有一个继承自Azure Microsoft.Azure.Documents.Document类的文档,这是我的属性的结构。

[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方法,否则对象的动态视图始终包含其原始值。

2 个答案:

答案 0 :(得分:1)

正如我在相关的Github帖子中提到的那样,从Document扩展类时似乎存在一个错误。请从Resource作为基类扩展,一切都应该正常。然后,您需要使用接受docLink和更新对象的ReplaceDocumentAsync的其他重载。

请告诉我这是否适合您。

答案 1 :(得分:0)

在您的代码中,示例 您可以使用文档db API中提供的switch (expression) { case: { somethings; break; } } ,它可以为您完成所有脏工作,并替换文档。您会找到详细信息here