插入实体时:
{
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
的情况下执行此操作。
答案 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)
}
});