2016-07-25 10 views
0

Auf das Unternehmen Einfügen:Azure Table String Einheit

{ 
    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\'"' } 
} 

Beachten Sie, dass die filename der abgerufenen Einheit hat keine Eigenschaft '$': 'Edm.String'

Wenn die retrieveEntity():

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

es wird als abgerufen Option autoResolveProperties wird gesetzt, dann erhält filename die Eigenschaft '$': 'Edm.String'

Allerdings wäre es sicherer, die autoResolveProperties Option zu vermeiden, da die documentationThe logic for returning entity types can get complicated erwähnt.

Die App benötigt keine automatische Erkennung von Eigenschaften. Es muss nur den identischen Typ abgerufen werden, der explizit eingefügt wurde (Edm.String).

Ist dies ohne Einstellung autoResolveProperties möglich?

Antwort

0

Wie die Beschreibung in den Quellcode Azure Storage SDK for node.js,

Der Dienst stellt nur einen Typ, wenn JsonFullMetadata oder JsonMinimalMetadata verwendet wird, und wenn der Typ Int64, GUID Binär- oder Datumzeit.

Also sollte der String-Typ nicht standardmäßig zur Verfügung gestellt werden. Wir können jedoch den Parameter options.propertyResolver verwenden, um eine Funktion zum Abrufen des Edm-Typs anzupassen.

Bitte versuchen Sie den folgenden Code-Schnipsel:

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) 
    } 
}); 

verweisen auf https://blogs.msdn.microsoft.com/windowsazurestorage/2014/06/26/microsoft-azure-storage-client-module-for-node-js-v-0-2-0/ für weitere Informationen.

+0

Dank [@Gary Liu] (http://stackoverflow.com/users/4989668/gary-liu-msft), habe ich es ausprobiert. Technisch funktioniert es, aber es bedeutet auch zusätzlichen Code, um alle Eigenschaften-Namen zu behandeln - nicht so gut für den Quellcode, denkst du nicht? Eine Umgehungslösung besteht derzeit darin, 'typeof _' zu erkennen, wenn '$' fehlt und feststellt, ob es sich um eine Zeichenkette handelt. Ich denke, es ist ähnlich zu tun, was "autoResolveProperties" tut. Vielen Dank für Ihre Antwort und die Links. –

Verwandte Themen