2016-07-25 4 views
0

На вставке объект:Azure Table строка объект

{ 
    PartitionKey: { _: '[email protected]', '$': 'Edm.String' }, 
    RowKey: { _: 'a31d564b-20bc-4721-8b76-57d124967987', '$': 'Edm.String' }, 
    filename: { _: 'file-foo', '$': 'Edm.String' } 
} 

он получает извлекаться как:

{ 
    PartitionKey: { '$': 'Edm.String', _: '[email protected]' }, 
    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'

Однако, было бы безопаснее избегать опции autoResolveProperties, так как documentation упоминает The logic for returning entity types can get complicated.

Приложение не нуждается в автоматическом обнаружении свойств. Нужно только получить идентичный тип, который явно вставлен (Edm.String).

Возможно ли это без установки autoResolveProperties.

ответ

0

В описании в исходном коде Azure Storage SDK for node.js,

Служба предоставляет только тип, если используется JsonFullMetadata или JsonMinimalMetadata, и если тип Int64, Guid, Двоичный, или 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', '[email protected]', '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/ для получения дополнительной информации.

+0

Спасибо [@Gary Liu] (http://stackoverflow.com/users/4989668/gary-liu-msft), я попробовал. Технически это работает, но также означает дополнительный код для обработки всех имен свойств - не так ли поддерживаемый исходный код, не так ли? На данный момент обходным путем является обнаружение 'typeof _' всякий раз, когда' $ 'отсутствует и определяет, есть ли его строка. Я думаю, что это похоже на то, что делает autoResolveProperties. Спасибо за ваш ответ и ссылки. –