我们已经使用字符串属性定义了一个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,我可能会理解这一点,但我们将所有内容视为字符串。
答案 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);
检索单个实体
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());
如果我们创建一个随机码设置为034120的模型
请与我们分享您用于创建模型的代码。