Нулевые значения хранилища таблиц Azure в результате запроса

#c# #.net #azure #azure-table-storage

#c# #.net #azure #azure-table-storage

Вопрос:

Я создаю проект для хранения данных датчиков с устройств Интернета вещей. Я использую концентратор Интернета вещей, потоковую аналитику и хранилище таблиц.

У меня есть веб-API, который я хочу возвращать значения из таблицы в хранилище таблиц. Я не знаю, почему я получаю нулевые значения в ответ из хранилища таблиц только в пользовательских столбцах. Я знаю, что столбцы в хранилище таблиц чувствительны к регистру, и я вспомнил об этом.

Что действительно интересно, когда я добавляю строку в таблицу из .NET SDK и затем запрашиваю ее также с помощью SDK, я получаю правильные значения (не null :))

Так выглядят данные в проводнике хранилища на портале Azure:

мои данные в хранилище таблиц

Это показывает, что столбцы имеют правильные имена с учетом регистра:

имена столбцов в хранилище таблиц

Вот объект TableValue из моего кода:

 public class TableValue : TableEntity
{
    public TableValue() { }

    public TableValue(string id, string deviceId)
    {
        PartitionKey = deviceId;
        RowKey = id;
    }

    public string Humidity { get; set; }
    public string Pressure { get; set; }
    public string Temperature { get; set; }
    public string SentTimestamp { get; set; }
}
 

Вот мой код, отвечающий за запрос значений из хранилища таблиц

 public async Task<List<TableValue>> Handle(Query request, CancellationToken cancellationToken)
{
            var table = _tableClient.GetTableReference("iotinsights");              
            var condition = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Develop1");
            var query = new TabyleQuery<TableValue>().Where(condition);
            var result = table.ExecuteQuery(query);

            return await Task.FromResult(result.ToList());
 }
 

Вот результат, который я получил от запроса в Postman:

     {
        "humidity": null,
        "pressure": null,
        "temperature": null,
        "sentTimestamp": null,
        "partitionKey": "Develop1",
        "rowKey": "0131560c-d1d7-4dc3-93f0-14a4c676baa5",
        "timestamp": "2020-12-28T12:21:55.9198819 01:00",
        "eTag": "W/"datetime'2020-12-28T11:21:55.9198819Z'""
    },
    {
        "humidity": null,
        "pressure": null,
        "temperature": null,
        "sentTimestamp": null,
        "partitionKey": "Develop1",
        "rowKey": "022bc3f8-c8d5-4ff5-88b6-57e53c720aa9",
        "timestamp": "2020-12-28T12:27:22.9991905 01:00",
        "eTag": "W/"datetime'2020-12-28T11:27:22.9991905Z'""
    }, ...
 

Что я должен сделать, чтобы получить правильные значения из этой таблицы?

Комментарии:

1. имена столбцов в вашем классе table имеют оболочку pascal, в то время как на выходе postman нулевые столбцы имеют оболочку camel. это может быть причиной, поскольку столбцы хранилища таблиц Azure чувствительны к регистру

2. Я устал от всех вариантов корпуса, и это не проблема. Все объекты, которые я возвращаю из api, всегда являются оболочкой верблюда

Ответ №1:

Я нашел решение, это было проще, чем я думал. Свойства объектов пользовательской таблицы должны иметь правильные типы данных

     public class TableValue : TableEntity
{
    public TableValue() { }

    public TableValue(string id, string deviceId)
    {
        PartitionKey = deviceId;
        RowKey = id;
    }

    public Double? Humidity { get; set; }
    public Double? Pressure { get; set; }
    public Double? Temperature { get; set; }
    public DateTime? SentTimestamp { get; set; }
    
}