Arhn - архитектура программирования

Операция получения хранилища таблиц Azure возвращает null для значения, которое не равно null.

Это формат моих данных для хранения таблиц

PartitionKey Метка времени RowKey Close Currency Дата

Вот мой объект сущности

public class CurrencyEntity : TableEntity
{
    public CurrencyEntity() { }
    public CurrencyEntity(string currency, string date)
    {
        Currency = currency.ToUpper();
        Date = date;

        PartitionKey = currency.ToUpper();
        RowKey = date;
    }
    public CurrencyEntity(string currency, string date, string close)
    {
        Currency = currency.ToUpper();
        Date = date;
        Close = close;

        PartitionKey = currency.ToUpper();
        RowKey = date;
    }

    public string Currency { get; set; }
    public string Date { get; set; }
    public string Close { get; set; }
    
}

Это мой метод обслуживания таблиц для получения значения валюты для даты для преобразования цен в доллары США.

 public async Task<decimal?> GetCurrencyValueForDate(string currency, DateTime date)
    {
        //ensure variables match key formats
        currency = currency.ToUpper();
        if (date > DateTime.Now)
        {
            return null;
        }
        var stringDate = date.ToString(CurrencyTableRowKeyFormat);
        var table = GetCloudTable(new AzureConfiguration(_config).WebsiteStorageAcctConnectionString, CurrencyTableName);
        var retrieveOperation = TableOperation.Retrieve<CurrencyEntity>(currency, stringDate);
        var result = await table.ExecuteAsync(retrieveOperation);

        var dto = result?.Result as CurrencyEntity;
        return Convert.ToDecimal(dto?.Close);
    }

Операция извлечения фактически извлекает данные строки, НО каждый раз, когда переменная результата имеет все правильные значения, ЗА ИСКЛЮЧЕНИЕМ Close всегда имеет значение NULL, несмотря на тот факт, что close имеет значение в таблице.

Примечание: я не работал над этим проектом около 6 месяцев, я почти уверен, что он работал правильно в последний раз, когда я работал над ним. Я использую Microsoft.Azure.Cosmos.Table;

введите описание изображения здесь

введите описание изображения здесь

Любая помощь приветствуется.

Примечание. В случае сомнений перезагрузите компьютер. Поскольку Гуарав не смог воспроизвести ошибку И единственный ответ, с моим точно таким же кодом и таблицей не удалось вызвать ошибку, единственным логическим выводом является то, что моя таблица каким-то образом была повреждена, поскольку этот код работал некоторое время назад. Я удалил таблицу и повторно импортировал данные, и теперь все работает.

24.06.2021

  • Почему ты делаешь result?.Result? Разве result переменная не должна содержать вашу сущность? 24.06.2021
  • А если результат нулевой? В любом случае проблема с данными возникает ДО выполнения этого кода. Close имеет значение null в переменной результата 24.06.2021
  • Понятно. В старом SDK хранилища операция извлечения вызывала бы исключение, если объект не был найден, но они изменили это поведение в новом SDK. Я только что попробовал ваш код и могу правильно получить данные. 24.06.2021
  • Вот мой код: gist.github.com/gmantri/bcb61923628ed5fbfe9bfef0a 24.06.2021
  • Спасибо, но, как вы можете видеть в отредактированном сообщении, строка имеет значение в таблице, но код, который идентичен вашему, возвращает null для значения Close результата. 24.06.2021
  • Можете поделиться скриншотом данных? 24.06.2021
  • я сделал, в отредактированном сообщении 24.06.2021
  • Вы поделились структурой таблицы. Мне больше интересно видеть фактические данные, которые хранятся. 24.06.2021
  • Есть изображение моего обозревателя хранилища Azure, показывающее строку, которую я извлекаю в исходном сообщении. 24.06.2021
  • К сожалению, я этого не вижу. 24.06.2021
  • его там сейчас ... не знаю, почему он не работал раньше 24.06.2021
  • Спасибо. Могу воспроизвести ошибку :). Я изменил тип данных атрибута Close в сущности (сохраненной сущности) с String на Double, и теперь в моем коде значение Close становится нулевым. Пожалуйста, проверьте тип данных атрибута Close в Storage Explorer. 24.06.2021
  • И как мне это сделать? Я не понимаю, как это делается. 24.06.2021
  • Из того, что я вижу, все свойства относятся к строке типа в текущей таблице 24.06.2021
  • См. Это: i.stack.imgur.com/cbu9V.png. В моем случае я установил значение Double. 24.06.2021
  • Спасибо за помощь, посмотрите, как у меня это работает, в примечании в конце сообщения. 25.06.2021
  • Рад слышать, что вы разблокированы. 25.06.2021

Ответы:


1

Согласно моему тесту, структура таблицы должна быть такой, как показано ниже:  введите описание изображения здесь

Мой код Tes

string connectionString = "";
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
            var tableClient = storageAccount.CreateCloudTableClient();
            var table= tableClient.GetTableReference("test");
            var retrieveOperation = TableOperation.Retrieve<CurrencyEntity>("USD", "2021-06-24");
            var result = await table.ExecuteAsync(retrieveOperation);

            var dto = result?.Result as CurrencyEntity;


public class CurrencyEntity : TableEntity
    {
        public CurrencyEntity() { }
        public CurrencyEntity(string currency, string date)
        {
            Currency = currency.ToUpper();
            Date = date;

            PartitionKey = currency.ToUpper();
            RowKey = date;
        }
        public CurrencyEntity(string currency, string date, string close)
        {
            Currency = currency.ToUpper();
            Date = date;
            Close = close;

            PartitionKey = currency.ToUpper();
            RowKey = date;
        }

        public string Currency { get; set; }
        public string Date { get; set; }
        public string Close { get; set; }

    }

введите описание изображения здесь

25.06.2021
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..