2016-04-21 12 views
5

Ich versuche, eine gespeicherte Prozedur auf einer partitionierten Auflistung (serverseitige Partitionierung) aus dem .NET SDK (v1.6.3) auszuführen.Wie übergeben Sie einen PartitionKey zur Ausführung eines StoredProcedure?

await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("db0", "collection0", "testsproc0"), storedProcedureParams);

erhalte ich die Fehlermeldung „PartitionKey Wert muss für diesen Vorgang zugeführt werden“. Tatsächlich sehe ich diesen Fehler im Azure-Portal, wenn ich mit dem Skript-Explorer herumspiele. Ich sehe jedoch keine Möglichkeit, einen PartitionKey hinzuzufügen. Ist das momentan eine Einschränkung bei der API und den partitionierten Sammlungen oder fehlt mir etwas?

Antwort

5

Sie können den Partitionsschlüssel übergeben, indem Sie die überladene ExecuteStoredProcedureAsync-Methode mit RequestOptions verwenden. Zum Beispiel

await client.ExecuteStoredProcedureAsync<DeviceSignal>(
UriFactory.CreateStoredProcedureUri("db", "coll", "SetLatestStateAcrossReadings"), 
new RequestOptions { PartitionKey = new PartitionKey("XMS-001") }, sprocsParams); 
+0

Ich denke auf jeden Fall sind Sie hier richtig, denn das ist, was in ihrer docs, aber leider bin ich immer noch den Fehler. Ich denke, es gibt ein Problem, weil ich einen Partitionsschlüssel für eine Einzelpartitionssammlung eingerichtet habe. – JamyRyals

0

ich einen ähnlichen Fehler zu erhalten und festgestellt, dass ich eine falsches Partition Key Path hatte, als ich die Dokumentensammlung erstellt, wie in der Zeile angezeigt, collectionDefinition.PartitionKey.Paths.Add("/LastName") weiter unten. Meine ExecuteStoredProcedure RequestOption stimmt nicht mit dem Feld überein, das ich in new RequestOptions { PartitionKey = new PartitionKey("matchingLastNameSelectionHere") } ausgewählt habe. Hoffe das hilft.

 private static async Task<DocumentCollection> CreateCollectionAsync(string dbLink, string id) 
    { 
     DocumentCollection collectionDefinition = new DocumentCollection { Id = id }; 
     collectionDefinition.IndexingPolicy = new IndexingPolicy(new RangeIndex(DataType.String) { Precision = -1 }); 
     collectionDefinition.PartitionKey.Paths.Add("/LastName"); 

     return await _client.CreateDocumentCollectionAsync(
      dbLink, 
      collectionDefinition, 
      new RequestOptions { OfferThroughput = 400 }); 
    } 

Execute Code

await client.ExecuteStoredProcedureAsync<DeviceSignal>(UriFactory.CreateStoredProcedureUri("db", "coll", "SetLatestStateAcrossReadings"), new RequestOptions { PartitionKey = new PartitionKey("matchingLastNameSelectionHere") }, sprocsParams); 
+0

wie mit dem pydocumnetdb-Client (Python-Client) nur einzelne Methode verfügbar client.ExecuteStoredProcedure() – donald