2012-12-12 38 views
4

我试图将数据插入到Azure表中,但一切都转换为字符串。Azure表存储只支持字符串作为数据类型?

E.g.我将数字/布尔

var test={ PartitionKey : '4', RowKey : '2', foo: 4, bar: true }; 
tableService.insertEntity('mytable', test, ...); 

​​

回报

{ id: 'http://127.0.0.1:10002/devstoreaccount1/identid(PartitionKey=\'4\',RowKey=\'2\')', 
    link: 'identid(PartitionKey=\'4\',RowKey=\'2\')', 
    updated: '2012-12-12T10:26:44Z', 
    etag: 'W/"datetime\'2012-12-12T10%3A26%3A44.547Z\'"', 
    PartitionKey: '4', 
    RowKey: '2', 
    Timestamp: '2012-12-12T10:20:44.897Z', 
    foo: '4', 
    bar: 'true' } 

我如何可以指定一个数据类型?


OK,只是,你可以指定

var test={ PartitionKey : '4', RowKey : '2', 
    foo: { '@': { type: 'Edm.Int32' }, '#': 4 } }; 

但是否有任何辅助功能自动添加类型的数据类型的SDK看到?

+0

黑客:我发现如果你用正确类型的虚拟对象来种子表(使用htt p://azurestorageexplorer.codeplex.com/或类似的),然后后续插入将被正确键入(并且随后的插入错误类型将引发错误)。 – JcFx

+0

有趣。我不知道表存储支持类似于模式的东西。 – laktak

+0

您可以添加更多的字段到一个实体而不会导致错误(并且省略现有的字段),但是如果您已经有一个名为'test'的字段,并且其中包含一个bool,那么如果您有一个'invalid input'错误尝试将一个字符串(甚至'真')放入该字段。因此创建一个虚拟对象似乎创建了一种隐式模式。 – JcFx

回答

4

由于SDK似乎并没有包含任何有用的东西,我写这些现在:

function azType(type, v) { return { "@": { type: type }, "#": v }; } 
function azBool(v) { return azType("Edm.Boolean", v); } 
function azBinary(v) { return azType("Edm.Binary", v); } 
function azByte(v) { return azType("Edm.Byte", v); } 
function azDateTime(v) { return azType("Edm.DateTime", v); } 
function azDateTimeOffset(v) { return azType("Edm.DateTimeOffset", v); } 
function azDecimal(v) { return azType("Edm.Decimal", v); } 
function azDouble(v) { return azType("Edm.Double", v); } 
function azGuid(v) { return azType("Edm.Guid", v); } 
function azInt64(v) { return azType("Edm.Int64", v); } 
function azInt32(v) { return azType("Edm.Int32", v); } 
function azInt16(v) { return azType("Edm.Int16", v); } 
function azSByte(v) { return azType("Edm.SByte", v); } 
function azSingle(v) { return azType("Edm.Single", v); } 
function azString(v) { return azType("Edm.String", v); } 
function azTime(v) { return azType("Edm.Time", v); } 

var test={ PartitionKey : '4', RowKey : '2', foo: azInt32(4) }; 

我不知道为什么他们改变它,但启动与0.6.10 azType功能需要更换:

function azType(type, v) { return { "$": { type: type }, "_": v }; } 
1

只有那些8种类型由表服务数据模型支持:

  • Edm.Binary
  • Edm.Boolean
  • Edm.DateTime
  • Edm.Double
  • Edm.Guid
  • Edm.Int32
  • Edm.Int64
  • Edm.String
通过 http://msdn.microsoft.com/en-us/library/windowsazure/dd179338.aspx

,并小心在你的对象id属性:

{ PartitionKey : '4', RowKey : '2', id: azInt32(4) };

如果您尝试这样做,错误消息就不那么明显了:

Error inserting : { [Error: [object Object]] code: 'PropertiesNeedValue', message:{ _: 'The values are not specified for all properties in the entity...','$': { 'xml:lang': 'en-US' } } }

相关问题