Azure TableEntity,覆盖Write& ReadEntity方法

时间:2017-08-04 18:32:44

标签: azure azure-table-storage

我有一个Azure表,有些像这样的枚举

pk   rk   en     fr     de   ...

foo  1  'E-f1' 'F-f1' 'D-f1' ...
foo  2  'E-f2' 'F-f2' 'D-f2' ...

bar  1  'E-b1' 'F-b1' 'D-b1' ...
bar  2  'E-b2' 'F-b2' 'D-b2' ...
bar  3  'E-b3' 'F-b3' 'D-b3' ...

enfrde等...是语言代码,分别是表格中的列名称。

当用户选择语言时,我需要为“foo”和“bar”选择下拉菜单 我需要显示下拉列表。

我创建了一个DescriptionEntity,其Description应保留'en'或'fr'或'de'文本值,具体取决于当前的用户界面语言。

以下代码是否将Description属性替换为Azure表中的当前语言值并分别读取它,或者我误解了某些内容(因为文档中的内容不是很清楚)......?

public class DescriptionEntity : TableEntity
{
    public string Description { get; set; }
    private string lang;

    public DescriptionEntity(string lang) {
        this.lang = lang;
    }

    public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext) {
        base.ReadEntity(properties, operationContext);
        if (properties.ContainsKey(this.lang)) {
            this.Description = properties[this.lang].StringValue;
        }
    }

    public override IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
    {
        var x = base.WriteEntity(operationContext);
        var descriptionValue = this.Description;
        if (x.ContainsKey(lang)) {
            x[lang].StringValue = this.Description;
        }
        else {
            x.Add(lang, new EntityProperty(this.Description));
        }
        x.Remove("Description");
        return x;
    }
}

1 个答案:

答案 0 :(得分:1)

  

我创建了一个DescriptionEntity,它有一个描述,应该保留&#39; en&#39;或者&#39; fr&#39;或者&#39; de&#39;文本值,具体取决于当前的用户界面语言。

     

以下代码是否使用Azure表中的当前语言值替换Description属性并分别读取它,或者我误解了某些内容(因为文档中的内容不是很清楚)......?

根据我对以下示例的测试,您的代码应使用基于当前用户界面语言的语言值替换Description属性。

Azure表中的实体:

enter image description here

DescriptionEntity class:

public class DescriptionEntity : TableEntity
{
    public DescriptionEntity(string pk, string rk)
    {
        this.PartitionKey = pk;
        this.RowKey = rk;
    }
    public DescriptionEntity() { }

public string Description { get; set; }

    string lang = "en";

    public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext)
    {
        base.ReadEntity(properties, operationContext);
        if (properties.ContainsKey(lang))
        {
            this.Description = properties[lang].StringValue;
        }
    }
}

查询实体:

TableQuery<DescriptionEntity> query = new TableQuery<DescriptionEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "foo"));

foreach (DescriptionEntity entity in table.ExecuteQuery(query))
{
    string languages = entity.Description;
}

enter image description here