Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy [重复]
Posted
技术标签:
【中文标题】Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy [重复]【英文标题】:Cosmos DB Not Respecting Json.Net CamelCaseNamingStrategy in Query [duplicate] 【发布时间】:2017-12-10 13:27:33 【问题描述】:我正在.Net 中为 Cosmos DB 创建一个存储库,并且为了避免使用 [JsonProperty(PropertyName = "thePropertyName")]
装饰每个类属性,我已经使用 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
装饰了我的类。
CreateDocumentAsync
(例如)使用属性的驼峰式名称以 JSON 格式正确序列化我的 Cosmos DB 文档。到目前为止一切顺利。
然而,我的问题是,当我通过 LINQ 查询 Cosmos DB 时,它生成的用于查询 COSMOS DB 的 SQL 不尊重装饰类的 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
属性,因此不会返回任何文档。这是因为 Cosmos DB 查询对于字段/属性名称是区分大小写的。例如,以下产生不同的结果(注意名称的大小写差异):
SELECT * FROM c WHERE c.name = "Health"
对比
SELECT * FROM c WHERE c.Name = "Health"
我已通过检查CreateDocumentQuery
生成的查询 SQL 确认了这一点,并寻找了可能允许我在 SqlQuerySpec
中指示属性名称大小写但没有成功的选项。
所以,我的问题是:有谁知道如何在 Cosmos Db 中使用类定义的驼峰大小写策略进行 LINQ 查询,而不必通过 [JsonProperty(PropertyName = "thePropertyName")]
手动设置每个属性。
提前感谢大家的帮助。
【问题讨论】:
布莱恩,感谢您的格式化。我的第一个问题完全忘记了格式化。以后会尽量避免。 【参考方案1】:目前不可能。见https://***.com/a/37490316/37421
我发现通过属性设置它非常危险,而且是一个错误。
【讨论】:
感谢您的快速回复。我同意您的观点,即这可能会出现错误,而且也很乏味。我会耐心等待 Cosmos DB 团队按照他们的路线图解决这个问题。以上是关于Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Azure Cosmos DB 的一个查询中选择多个聚合值