Cosmos DB写入成功但读取返回404 NotFound错误是什么原因?
问题原因及修复方案
核心错误:分区键参数传入错误
你创建容器时指定的分区键路径是/id,这意味着每个文档的分区键值等于该文档id字段的实际取值,而不是固定字符串"id"。你当前读取代码里写的new PartitionKey("id")是在查询分区键值为"id"这三个字符的文档,自然匹配不到你存的对应id的条目。
修正后的读取代码
public async Task<MyDto> GetRecord(Guid myId) { // 分区键值传目标文档id的实际值,和第一个参数保持一致即可 var data = await container.ReadItemAsync<FlightDoc>(myId.ToString(), new PartitionKey(myId.ToString())); return new MyDto { Id = Guid.Parse(data.Resource.id) }; }
关于嵌套实体读取的补充说明
只要你的FlightDoc类中定义了对应Sample子实体集合的属性,例如:
public class FlightDoc { public string id { get; set; } // 其他Flight属性 public List<Sample> Samples { get; set; } }
Cosmos DB的SDK会自动反序列化文档中的所有嵌套结构,不需要额外配置就能拿到完整的带Sample子实体的Flight数据。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

