2014-11-24 56 views
3

創建DynamicTableEntity如下:DynamicTableEntity PartitionKey和RowKey

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」, 「模式」, 「PartitionKey」, 「RowKey」 我想改變「PartitionKey」,「RowKey」的名稱,即我想要env是一個partitionKey,但列名稱是「Env」。我該怎麼做?

回答

4

簡單的答案是,你不能。 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); 
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 
     }; 
    } 
}