Azure DocumentDB ReplaceDocument不会保存提交的子文档

Azure DocumentDB ReplaceDocument不会保存提交的子文档,azure,asp.net-web-api,azure-cosmosdb,Azure,Asp.net Web Api,Azure Cosmosdb,问题是:当我发送整个文档并在控制器中更改该文档时,它会替换fine。 但是,当我提交子文档和文档的ID时,按ID获取文档并将子文档添加到其中,它不会用新文档替换原始文档 无法工作的控制器功能 [HttpPut] public async Task<IHttpActionResult> Put(string id, [FromBody]DealMutationModel mutation) { if (ModelState.IsValid)

问题是:当我发送整个文档并在控制器中更改该文档时,它会替换fine。 但是,当我提交子文档和文档的ID时,按ID获取文档并将子文档添加到其中,它不会用新文档替换原始文档

无法工作的控制器功能

    [HttpPut]
    public async Task<IHttpActionResult> Put(string id, [FromBody]DealMutationModel mutation)
    {
        if (ModelState.IsValid)
        {
            mutation.CreatedAt = DateTime.UtcNow;

            DealModel Deal = DealRepo.Get(x => x.Id == id).FirstOrDefault();

            List<DealMutationModel> mutationList = Deal.Mutations.ToList();
            DealMutationModel newMutation = mutation;
            mutationList.Add(newMutation);
            Deal.Mutations = mutationList;

            await DealRepo.UpdateDealAsync(Deal);

            return Ok();

        }

        return BadRequest(ModelState);
    }
解决方案和SDK 我们使用的DocDB版本是1.4.1,1.5.0已经发布,所以我将升级并测试。 现在的解决方法是创建一个动态的并用交易填充它,使用一个命令获取变异并将其应用到一个新的变异模型,然后将变异添加到交易中

using Microsoft.Azure.Documents;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace BC.UI.Web.Models
{
    public class DealModel : Document
    {
       [Required]
       [JsonProperty(PropertyName = "createdAt")]
       public DateTime CreatedAt { get; set; }
       ......
    }

    public class DealMutationModel
    {
       [JsonProperty(PropertyName = "status")]
       public string Status{ get; set; }
       ......
    }
}
[HttpPut]
public async Task<IHttpActionResult> Put(string id, [FromBody]MutationCommand mutationCommand)
{
    dynamic dyn = DocumentDB.Client.CreateDocumentQuery<Document>(DocumentDB.DealCollection.DocumentsLink).Where(d => d.Id == id).AsEnumerable().FirstOrDefault();
    var deal = (DealModel)dyn;
.....
[HttpPut]
公共异步任务Put(字符串id,[FromBody]MutationCommand MutationCommand)
{
dynamic dyn=DocumentDB.Client.CreateDocumentQuery(DocumentDB.DealCollection.DocumentsLink).Where(d=>d.Id==Id).AsEnumerable().FirstOrDefault();
var交易=(DealModel)dyn;
.....
提前感谢,,
Karel

你能把DealMutationModel和DealModel的类定义包括进来吗?特别是,你是不是碰巧从文档中派生出来的?用类定义编辑了这篇文章,是的,交易模型是从文档中派生出来的。谢谢,忘了问一下-DocumentDB SDK版本是什么?已经很高兴有人回应了,我编辑了再次发布并给出了我们现在使用的解决方法。仍然希望知道更好的解决方案,因此我们使用webapi的优势。
using Microsoft.Azure.Documents;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace BC.UI.Web.Models
{
    public class DealModel : Document
    {
       [Required]
       [JsonProperty(PropertyName = "createdAt")]
       public DateTime CreatedAt { get; set; }
       ......
    }

    public class DealMutationModel
    {
       [JsonProperty(PropertyName = "status")]
       public string Status{ get; set; }
       ......
    }
}
[HttpPut]
public async Task<IHttpActionResult> Put(string id, [FromBody]MutationCommand mutationCommand)
{
    dynamic dyn = DocumentDB.Client.CreateDocumentQuery<Document>(DocumentDB.DealCollection.DocumentsLink).Where(d => d.Id == id).AsEnumerable().FirstOrDefault();
    var deal = (DealModel)dyn;
.....