2016-04-21 29 views
5

Sto provando a eseguire una stored procedure su una raccolta partizionata (partizionamento lato server) da .net SDK (v1.6.3).Come si passa una PartitionKey a Execute a StoredProcedure?

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

ricevo l'errore "valore di PartitionKey deve essere fornito per questa operazione". In effetti, vedo questo errore nel portale di Azure quando gioco con Script Explorer. Tuttavia, non vedo alcun modo per aggiungere una PartitionKey. Si tratta di una limitazione con le API e le raccolte partizionate in questo momento, o mi manca qualcosa?

risposta

5

è possibile passare la chiave di partizione utilizzando il metodo ExecuteStoredProcedureAsync sovraccarico con RequestOptions. Ad esempio,

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

Sono assolutamente convinta che tu abbia ragione, perché questo è ciò che è in loro documenti, ma purtroppo sto ancora ottenere l'errore. Penso che ci sia un problema perché ho impostato una chiave di partizione, su una collezione a partizione singola. – JamyRyals

0

stavo ricevendo un errore simile e scoperto che avevo un errato Partition Key Path quando ho creato la raccolta di documenti, come mostrato in linea, collectionDefinition.PartitionKey.Paths.Add("/LastName"), sotto. My ExecuteStoredProcedure RequestOption non corrisponde al campo che ho selezionato nello new RequestOptions { PartitionKey = new PartitionKey("matchingLastNameSelectionHere") }. Spero che questo ti aiuti.

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

eseguire codice

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

come utilizzare il client pydocumnetdb (client python) solo il metodo disponibile client.ExecuteStoredProcedure() – donald