【问题标题】:Replacing Document in DocumentDB Not Saving Changes替换 DocumentDB 中的文档不保存更改
【发布时间】:2016-07-12 08:49:09
【问题描述】:

我有一个继承自 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 方法。

【问题讨论】:

标签: c# azure azure-cosmosdb nosql


【解决方案1】:

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

让我知道这是否适合你。

【讨论】:

    【解决方案2】:

    在您的代码中,例如 您可以使用文档数据库 API 中提供的**upsert**,它会为您完成所有脏活并替换文档。你找到详情here

    【讨论】:

    • 在发布此内容时,这不起作用。正如@rajesh 在他的回答中提到的那样,从 Document 类继承时存在一个错误。
    • 我在我的项目中使用它,它对我来说非常好用。当您更新您的应用时,您可能想再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多