#c# #azure
#c# #azure
Вопрос:
Похоже, это должна быть простая проблема, но мне трудно выделить ее.
У меня есть TableEntity
класс, в который я пытаюсь записать Azure Table Storage
:
public class MyEntity : TableEntity
{
public MyEntity(string imageId, string featureId)
{
this.PartitionKey = imageId;
this.RowKey = featureId;
}
public string Container { get; set; }
public bool FeatureEnabled { get; set; }
public int data;
public PointF Point;
public double X;
public double Y;
}
Я понимаю, что мое Point
свойство не будет сохранено в хранилище таблиц. Но когда я вставляю этот объект, Container
свойство и FeatureEnabled
оба сохраняются, но больше ничего?
Как это может быть? int
и double
, как говорят, поддерживаются, так что я могу здесь делать не так?
Ответ №1:
Container
И FeatureEnabled
являются свойствами класса. Остальные — это просто поля. TableEntity
будет выполняться только поиск и автоматическое сохранение свойств (поддерживаемых типов).
Поэтому преобразуйте данные, x и y в свойства, предоставляя get; set;
их таким же образом, как и те, которые работают.
Комментарии:
1. Ах! В этом так много смысла! Спасибо! Я соглашусь, как только это позволит мне.
Ответ №2:
Вам нужно будет определить getter / setter для ваших свойств int / double:
public class MyEntity : TableEntity
{
public MyEntity(string imageId, string featureId)
{
this.PartitionKey = imageId;
this.RowKey = featureId;
}
public string Container { get; set; }
public bool FeatureEnabled { get; set; }
public int data { get; set; }
public PointF Point;
public double X { get; set; }
public double Y { get; set; }
}
Ответ №3:
TableEntity очень ограничен с точки зрения типов свойств, которые он поддерживает.
Если вы используете ObjectFlattenerRecomposer API, который я реализовал https://www.nuget.org/packages/ObjectFlattenerRecomposer /
Вы можете получить все свои свойства, включая свойство Point, записанные в хранилище таблиц, api также обрабатывает перекомпозицию исходного объекта обратно, когда вы считываете объект из хранилища таблиц.
Вот пример использования:
using ObjectFlattenerRecomposer;
//Flatten object and convert it to EntityProperty Dictionary
Dictionary<string, EntityProperty> flattenedProperties = EntityPropertyConverter.Flatten(complexObject);
// Create a DynamicTableEntity and set its PK and RK
DynamicTableEntity dynamicTableEntity = new DynamicTableEntity(partitionKey, rowKey);
dynamicTableEntity.Properties = flattenedProperties;
// Write the DynamicTableEntity to Azure Table Storage using client SDK
//Read the entity back from AzureTableStorage as DynamicTableEntity using the same PK and RK
DynamicTableEntity entity = [Read from Azure using the PK and RK];
//Convert the DynamicTableEntity back to original complex object.
Imagine original complexObject was of type Order.
Order order = EntityPropertyConverter.ConvertBack<Order>(entity.Properties);