Azure DocumentDB ReplaceDocument不会保存提交的子文档
问题是:当我发送整个文档并在控制器中更改该文档时,它会替换fine。 但是,当我提交子文档和文档的ID时,按ID获取文档并将子文档添加到其中,它不会用新文档替换原始文档 无法工作的控制器功能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)
[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;
.....