停止Azure表将字符串视为八进制值

时间:2016-12-19 17:36:32

标签: c# azure-table-storage

我们已经使用字符串属性定义了一个Azure Table对象,我们在其中存储了一个随机的6位数代码:

SampleTable : TableEntity {

  public SampleTable (string partitionKey, string rowKey, string randomCode){
    PartitionKey = partitionKey;
    RowKey = rowKey;
    RandomCode = randomCode;
  }

  public string RandomCode {get; set;}
}

查看在Azure Tables中创建的表结构,RandomCode存储为字符串。

如果我们创建一个随机码设置为034120的模型,则存储资源管理器会将存储的值正确地显示为034120,但是当我们使用以下命令检索该值时:

TableOperation retrieveOperation = TableOperation
                                     .Retrieve<SampleTable>(partitionKey, rowKey);

// Execute the retrieve operation.
TableResult retrievedResult = Table.Execute(retrieveOperation);

var result = retrievedResult.Result as SampleTable;

RandomCode的值为102510(八进制表示为34,120)。

有没有办法强制Azure表将字符串属性视为字符串而不管内容如何?目前我们正在寻求强制我们的随机代码从1-9开始,但这似乎相当多余。

作为一个有趣的点,测试其他选项表明存储一个以0x开头的值假定该值为十六进制,并以字符串形式返回值的十进制版本。如果模型将值视为int,我可能会理解这一点,但我们将所有内容视为字符串。

1 个答案:

答案 0 :(得分:1)

据我所知,Azure表存储服务和Azure存储客户端库不会主动将字符串值转换为八进制值。根据你的描述和代码,我创建了一个样本来重现问题,代码在我这边工作正常。您可以参考示例代码来检查与代码的区别。

创建SampleTable类

public class SampleTable : TableEntity
{

    public SampleTable(string partitionKey, string rowKey, string randomCode)
    {
        PartitionKey = partitionKey;
        RowKey = rowKey;
        RandomCode = randomCode;
    }

    public SampleTable() { }

    public string RandomCode { get; set; }
}

创建表并插入实体

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

CloudTableClient tableClient = storageAccount.CreateCloudTableClient();


CloudTable table = tableClient.GetTableReference("SampleTable");
table.CreateIfNotExists();

SampleTable st = new SampleTable("p001", "pr1", "034120");

TableOperation insertOperation = TableOperation.Insert(st);

table.Execute(insertOperation);

检查存储资源管理器中的实体 enter image description here

检索单个实体

string partitionKey = "p001";
string rowKey = "pr1";
TableOperation retrieveOperation = TableOperation.Retrieve<SampleTable>(partitionKey, rowKey);


TableResult retrievedResult = table.Execute(retrieveOperation);

var result = retrievedResult.Result as SampleTable;

string txt = string.Format("RandomCode: {0}", result.RandomCode.ToString());

enter image description here

  

如果我们创建一个随机码设置为034120的模型

请与我们分享您用于创建模型的代码。