#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; }
}