Azure表字符串实体

时间:2016-07-25 08:11:51

标签: node.js azure azure-storage azure-table-storage

插入实体时:

{
  PartitionKey: { _: 'user@example.com', '$': 'Edm.String' },
  RowKey: { _: 'a31d564b-20bc-4721-8b76-57d124967987', '$': 'Edm.String' },
  filename: { _: 'file-foo', '$': 'Edm.String' }
 }

它被检索为:

{
  PartitionKey: { '$': 'Edm.String', _: 'user@example.com' },
  RowKey: { '$': 'Edm.String', _: 'a31d564b-20bc-4721-8b76-57d124967987' },
  filename: { _: 'file-foo' },
  Timestamp: { '$': 'Edm.DateTime', _: 2016-07-25T07:31:11.117Z },
  '.metadata':
   { metadata: 'http://127.0.0.1:10002/devstoreaccount1/$metadata#UserJobs/@Element',
     etag: 'W/"datetime\'2016-07-25T07%3A31%3A11.117Z\'"' }
}

请注意,检索到的实体filename没有属性'$': 'Edm.String'

如果设置了retrieveEntity()选项autoResolveProperties,则filename获取属性'$': 'Edm.String'

但是,由于documentation提及autoResolveProperties,因此避免使用The logic for returning entity types can get complicated选项会更安全。

该应用不需要自动检测属性。它只需要检索显式插入的相同类型(Edm.String)。

是否可以在不设置autoResolveProperties的情况下执行此操作。

1 个答案:

答案 0 :(得分:0)

Azure Storage SDK for node.js的源代码中的说明,

  

如果使用JsonFullMetadata或JsonMinimalMetadata,并且类型为Int64,Guid,Binary或DateTime,则服务仅提供类型。

因此默认情况下不应提供字符串类型。但是,我们可以利用options.propertyResolver参数自定义函数来检索edm类型。

请尝试以下代码段:

var propertyResolver = function (pk, rk, name, value) { 
    if (name.indexOf('BinaryField') !== -1) { 
    return 'Edm.Binary'; 
    } else if (name.indexOf('GuidField') !== -1) { 
    return 'Edm.Guid'; 
    } else if (name.indexOf('DateField') !== -1) { 
    return 'Edm.DateTime'; 
    } else if (name.indexOf('DoubleField') !== -1) { 
    return 'Edm.Double'; 
    } 
    return 'Edm.String'; 
};
var options = {};
options.propertyResolver = propertyResolver; 
tableSvc.retrieveEntity('table', 'user@example.com', 'a31d564b-20bc-4721-8b76-57d124967987',options, function(error, result, response){
  if(!error){
    // result contains the entity
    console.log(result)
  }
});

有关详细信息,请参阅https://blogs.msdn.microsoft.com/windowsazurestorage/2014/06/26/microsoft-azure-storage-client-module-for-node-js-v-0-2-0/