У меня есть проект, в котором я использую 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
?
Любая помощь очень ценится.