DynamicTableEntity PartitionKey和RowKey

时间:2014-11-24 14:31:56

标签: c# azure dynamic-tables

我按如下方式创建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”。我该怎么办?

2 个答案:

答案 0 :(得分:6)

虽然您无法重命名PartitionKey和RowKey,但您可以直接从表中解析为DTO。

我发现将数据投射到不同的受众群体(即非管理员的有限视图等)非常方便

HTH

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

答案 1 :(得分:5)

简单的答案是,你不能。 PartitionKeyRowKey是系统定义的属性(以及Timestamp),您无法更改其名称。如果您需要在应用程序中按这些名称访问属性,那么您可以为EnvVer定义另外两个自定义属性。

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);