5

我创建 DynamicTableEntity 如下:

string env = "envTest";
stting ver = "1.0";
siring id = "12356";
string mode = "verify";
DynamicTableEntity entryEntity = DynamicTableEntity(env,ver);
entryEntity.Properties.Add("Id", id);
entryEntity.Properties.Add("Mode", mode);

结果创建了一个包含列的表:“Id”、“Mode”、“PartitionKey”、“RowKey” 我想更改“PartitionKey”、“RowKey”的名称,即我希望 env 是一个 partitionKey 但是但是列名称为“Env”。我该怎么做?

4

2 回答 2

7

尽管您确实无法重命名 PartitionKey 和 RowKey,但您可以直接从表中解析为 DTO。

我发现这对于将数据投影给不同的受众非常方便(即非管理员的有限视图等)

高温高压

var query = MyEntityDBO.CreateQuery<DynamicTableEntity>()
            .Where(x => x.PartitionKey.Equals("Blah"))
            .Resolve(MyEntityDTO.GetEntityResolver());
var segment = await query.ExecuteSegmentedAsync(new TableContinuationToken());
if(segment.Results.Count > 0) {
     // Results = IEnumerable<MyEntityDTO>
}

public class MyEntityDTO
{
    public string Id { get; set; }
    public string Mode { get; set;  }
    public string Env { get; set; }
    public string Ver { get; set; }

    public static EntityResolver<MyEntityDTO> GetEntityResolver()
    {
        return (pk, rk, ts, props, etag) =>
        { 
             Env = pk,
             Ver = rk,
             Id = props["Id"].StringValue,
             Mode = props["Mode"].StringValue
        };
    }
}
于 2014-11-25T20:23:16.607 回答
5

简单的答案是你不能。PartitionKey并且RowKey是系统定义的属性(与 一起Timestamp),您不能更改它们的名称。如果您需要在应用程序中通过这些名称访问属性,您可以做的是Env再定义两个自定义属性。Ver

DynamicTableEntity entryEntity = DynamicTableEntity(env,ver);
entryEntity.Properties.Add("Id", id);
entryEntity.Properties.Add("Mode", mode);
entryEntity.Properties.Add("Env", env);
entryEntity.Properties.Add("Ver", ver);
于 2014-11-24T14:36:42.137 回答