0

我有一个项目,我使用 CosmosDb (SQL API) 作为我的数据库。这是一个 .Net Core 项目,我正在使用最新的稳定 NuGet 包。

文档客户端创建如下,并使用自定义合同解析器。

new DocumentClient(new Uri(settings.DatabaseUri), settings.DatabaseKey,
    new JsonSerializerSettings
    {
        ContractResolver = new PrivateSetterCamelCasePropertyNamesContractResolver(),
        Converters = new List<JsonConverter>
        {
           new EmailJsonConverter()
        }
     });

我有一个名为EmailAccount

public class EmailAccount : Entity
{
    public string Email { get; private set; }
    public string DisplayName { get; private set; }

    public EmailAccount(DDD.Core.ValueObjects.Email email,
        string displayName)
    {
        Email = email ?? throw new ArgumentNullException(nameof(email));
        DisplayName = string.IsNullOrWhiteSpace(displayName) ? throw new ArgumentNullException(nameof(displayName)) : displayName;
    }
}

序列化时,所有属性都转换为驼峰式,一切正常。但问题是当我尝试过滤文档时。当我尝试按电子邮件过滤时,生成的 SQL 查询看起来像这样。

SELECT * FROM root WHERE (root["Email"] = "amila@iagto.com")

问题在于属性 ( Email) 的情况。数据库中的属性是,email但查询生成器似乎不遵守ContractResolver提供的并生成上述不返回任何结果的 sql 查询。

如果我将[JsonProperty("email")]Email 属性放在上面,则查询会正确生成。无论如何要在不使用Entity类中的属性的情况下正确生成查询?

非常感谢任何帮助。

4

1 回答 1

0

您需要JsonSerializerSettingsCreateDocumentQuery级别设置 LINQ to SQL 以获取它。

此属性是在 2.0.0+ 版本的 SDK 中添加的。

于 2018-10-12T15:23:22.813 回答