2016-04-21 6 views
5

Próbuję wykonać procedurę przechowywaną na partycjonowanej kolekcji (partycja po stronie serwera) z .net SDK (v1.6.3).Jak przekazać klucz PartitionKey do wykonania StoredProcedure?

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

otrzymuję błąd „wartość PartitionKey muszą być dostarczone dla tej operacji”. W rzeczywistości widzę ten błąd w portalu Azure, gdy bawię się z Eksploratorem skryptów. Jednak nie widzę sposobu, aby dodać PartitionKey. Czy jest to ograniczenie z interfejsem API i kolekcjami partycjonowanymi teraz, czy też czegoś mi brakuje?

Odpowiedz

5

można przekazać klucz partycji za pomocą przeładowanej metody ExecuteStoredProcedureAsync za pomocą polecenia RequestOptions. Na przykład,

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

Zdecydowanie uważam, że masz rację, bo to jest to, co jest w ich docs, ale niestety nadal jestem uzyskiwanie błąd. Wydaje mi się, że istnieje problem, ponieważ ustawiam klucz partycji w kolekcji pojedynczej partycji. – JamyRyals

0

ja otrzymywał podobny błąd i okazało się, że miałem błędny Partition Key Path kiedy stworzył zbiór dokumentów, jak pokazano w wierszu, collectionDefinition.PartitionKey.Paths.Add("/LastName") poniżej. Moje żądanie żądania ExecuteStoredProcedure nie pasuje do pola, które wybrałem w new RequestOptions { PartitionKey = new PartitionKey("matchingLastNameSelectionHere") }. Mam nadzieję że to pomoże.

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

wykonanie kodu

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

jak zrobić, używając klienta pydocumnetdb (klient python), tylko jedną dostępną metodę client.ExecuteStoredProcedure() – donald