2016-07-25 72 views
0

在插入實體:Azure Table中string實體

{ 
    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'

但是,由於documentation提到The logic for returning entity types can get complicated,因此避開autoResolveProperties選項會更安全。

該應用程序不需要自動檢測屬性。它只需要檢索明確插入的相同類型(Edm.String)。

是否可以在不設置autoResolveProperties的情況下執行此操作。

回答

0

如在Azure Storage SDK for node.js的源代碼的說明中,

該服務只提供如果使用JsonFullMetadata或JsonMinimalMetadata一個類型,並且如果類型是Int64類型,GUID二進制,或日期時間。

所以字符串類型不應該默認提供。但是,我們可以利用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'。感謝您的回覆和鏈接。 –