首页 > 解决方案 > DocumentDB LINQ 查询未正确转换枚举

问题描述

根据thisthis,DocumentDb LINQ 提供程序应该在生成使用枚举的查询时使用自定义 JsonConverters(早在 1.10.0 版)。但我们没有看到这种行为。

我的项目正在引用 Microsoft.Azure.DocumentDb 1.13.1,我们仍然看到一个 LINQ 查询将枚举转换为其数值。像这样的Where()谓词

request => request.Source == sourceId && request.State == state

生成这样的查询

{SELECT * FROM root WHERE ((root["Source"] = "5c196602-1a60-406a-81cd-1be5ac23eb18") AND (root["State"] = 0))) }

State是一个枚举,并根据我们在 docdb 客户端对象上的序列化程序设置正确序列化/存储在数据库中作为其字符串值。这不是将对象序列化/反序列化到文档/从文档中的问题 - 可以按预期工作。

我们可能做错了什么?是否在某处记录了如何启用/利用此功能?我们是否必须向 LINQ 提供程序或其他东西注册 JSON 转换器?

标签: linqazure-cosmosdb

解决方案


1.13.1 是一个有查询序列化问题的版本,所以它是 SDK 的一个错误。

如您在此处看到的,在 1.19.1 之后修复的那些问题:https ://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet#a-name11911191

  • 修复了自定义 JsonSerializer 设置未针对某些查询和存储过程执行的错误

您必须升级到 SDK 的 1.19.1 后版本。


推荐阅读