我有一个项目,我使用 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
类中的属性的情况下正确生成查询?
非常感谢任何帮助。