Hos*_*ein 12 .net c# azure azure-cosmosdb
在使用.NET SDK的Azure DocumentDB中,调用ReplaceDocumentAsync时出现以下错误:
"错误":["输入内容无效,因为所需的属性 - 'id;' - 缺失","请求有效负载无效.确保提供有效的请求有效负载."]
这是博客文章的场景,当添加新评论时,我获取文档,添加评论并调用ReplaceDocumentAsync.我是这样做的:
string query = "SELECT * FROM Posts p WHERE p.id = 'some guid'";
var post = Client.CreateDocumentQuery<Post>(Collection.DocumentsLink, query)
.AsEnumerable().FirstOrDefault();
post.Comments.Add(comment);
Document doc = Client.CreateDocumentQuery(Collection.DocumentsLink)
.Where(d => d.Id == id)
.AsEnumerable()
.FirstOrDefault();
var document = await Client.ReplaceDocumentAsync(doc.SelfLink, item);
Run Code Online (Sandbox Code Playgroud)
发布课程:
public class Post
{
public Post()
{
Comments = new List<Comment>();
}
public Guid Id { get; set; }
public List<Comment> Comments { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Hos*_*ein 18
好的,我明白了.
DocumentDB中的每个Document都需要具有"id"属性.如果一个类没有一个,它将被分配一个并保存到文档中.由于DocumentDB区分大小写,我的"Id"只是另一个属性,并添加了一个单独的"id"并分配给文档.
我通过使用Id的以下属性删除并重新创建我的所有文档来修复此问题:
[JsonProperty(PropertyName = "id")]
public Guid Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
或者你可以告诉 Cosmos 使用 camelCasingWhichIsStandardForJson
new CosmosClient(
connectionstring,
new CosmosClientOptions(){
SerializerOptions = new CosmosSerializationOptions(){
PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase
}
}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5175 次 |
| 最近记录: |