.NET SDK 中的 Azure DocumentDB、CreateDocumentQuery 不 return "id" 和“_self”
Azure DocumentDB, CreateDocumentQuery in .NET SDK does not return the "id" and "_self"
在 .NET 中使用下一个代码时:
var q = DocumentDBHelper.Client.CreateDocumentQuery<WishListUserItems>(DocumentDBHelper.CollUri(eCollection.WishList),
"SELECT c.UserId, c.Items FROM c JOIN items IN c.Items);
var lst = q.ToList();
"lst"中的对象return没有服务字段(_self, id, _rid)
尽管对象 "WishListUserItems" 继承自 "Document"。
甚至尝试向 "WishListUserItems" 添加属性,例如 "id"、“_self”。
看来问题是您 运行 自定义 SQL,而不只是检索文档。
SELECT c.UserId, c.Items FROM c JOIN items IN c.Items
意味着 DocumentDb 不再处理文档本身,它正在投影数据并且只是 returning 数据集,而不是文档,这意味着 DocumentDb 尝试 return 一个 id 或 _self.
returned 数据被反序列化为您要求的任何类型。请注意,因为您使用的是自定义 SQL,您没有获得整个文档,因此您不应试图将此实例保存回 DocumentDb。
就是说,如果您确实想要获取 id 和 _self 以便稍后检索和更新基础文档,您应该能够只将它们包含在您的 SQL 声明并在模型上添加相应的字段 class.
类似于
SELECT c.UserId, c.id, c._self, c.Items FROM c JOIN items IN c.Items)
(未测试)。
更通用的文档
当你一般只是检索实际文档时,你可能还会感叹缺少"id"和“_self”。我们实现了一个 DocumentBase class 来帮助解决这个问题,就像这样;
public abstract class DocumentBase
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "_etag")]
public string ETag { get; set; }
[JsonProperty(PropertyName = "_self")]
public string SelfIdentifier { get; set; }
}
ETag 的正确使用有点复杂,因为您需要在保存记录时手动更新它,但可以用来实现一些乐观的并发保护。
在 .NET 中使用下一个代码时:
var q = DocumentDBHelper.Client.CreateDocumentQuery<WishListUserItems>(DocumentDBHelper.CollUri(eCollection.WishList),
"SELECT c.UserId, c.Items FROM c JOIN items IN c.Items);
var lst = q.ToList();
"lst"中的对象return没有服务字段(_self, id, _rid)
尽管对象 "WishListUserItems" 继承自 "Document"。 甚至尝试向 "WishListUserItems" 添加属性,例如 "id"、“_self”。
看来问题是您 运行 自定义 SQL,而不只是检索文档。
SELECT c.UserId, c.Items FROM c JOIN items IN c.Items
意味着 DocumentDb 不再处理文档本身,它正在投影数据并且只是 returning 数据集,而不是文档,这意味着 DocumentDb 尝试 return 一个 id 或 _self.
returned 数据被反序列化为您要求的任何类型。请注意,因为您使用的是自定义 SQL,您没有获得整个文档,因此您不应试图将此实例保存回 DocumentDb。
就是说,如果您确实想要获取 id 和 _self 以便稍后检索和更新基础文档,您应该能够只将它们包含在您的 SQL 声明并在模型上添加相应的字段 class.
类似于
SELECT c.UserId, c.id, c._self, c.Items FROM c JOIN items IN c.Items)
(未测试)。
更通用的文档
当你一般只是检索实际文档时,你可能还会感叹缺少"id"和“_self”。我们实现了一个 DocumentBase class 来帮助解决这个问题,就像这样;
public abstract class DocumentBase
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "_etag")]
public string ETag { get; set; }
[JsonProperty(PropertyName = "_self")]
public string SelfIdentifier { get; set; }
}
ETag 的正确使用有点复杂,因为您需要在保存记录时手动更新它,但可以用来实现一些乐观的并发保护。