Как передать ключ PartitionKey для выполнения хранимой процедуры?

Я пытаюсь выполнить хранимую процедуру в секционированной коллекции (секционирование на стороне сервера) из .net SDK (v1.6.3).

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

Я получаю сообщение об ошибке «Для этой операции необходимо указать значение PartitionKey». Фактически, я вижу эту ошибку на портале Azure, когда экспериментирую с обозревателем сценариев. Однако я не вижу возможности добавить PartitionKey. Это ограничение API и секционированных коллекций прямо сейчас, или мне что-то не хватает?


person JamyRyals    schedule 21.04.2016    source источник


Ответы (2)


вы можете передать ключ раздела, используя перегруженный метод ExecuteStoredProcedureAsync с RequestOptions. Например,

await client.ExecuteStoredProcedureAsync<DeviceSignal>(
UriFactory.CreateStoredProcedureUri("db", "coll", "SetLatestStateAcrossReadings"),
new RequestOptions { PartitionKey = new PartitionKey("XMS-001") }, sprocsParams);
person h0n    schedule 21.04.2016
comment
Я определенно думаю, что вы правы, потому что это то, что написано в их документации, но, к сожалению, я все еще получаю сообщение об ошибке. Я думаю, что это проблема, потому что я установил ключ раздела для однораздельной коллекции. - person JamyRyals; 22.04.2016

Я получал аналогичную ошибку и обнаружил, что у меня был неправильный Partition Key Path при создании коллекции документов, как показано в строке collectionDefinition.PartitionKey.Paths.Add("/LastName") ниже. Мой ExecuteStoredProcedure RequestOption не соответствует полю, которое я выбрал в new RequestOptions { PartitionKey = new PartitionKey("matchingLastNameSelectionHere") }. Надеюсь это поможет.

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

Выполнить код

await client.ExecuteStoredProcedureAsync<DeviceSignal>(UriFactory.CreateStoredProcedureUri("db", "coll", "SetLatestStateAcrossReadings"), new RequestOptions { PartitionKey = new PartitionKey("matchingLastNameSelectionHere") }, sprocsParams);
person Peter Molloy    schedule 09.12.2016
comment
как сделать, используя клиент pydocumnetdb (клиент python), доступен только один метод client.ExecuteStoredProcedure () - person donald; 22.10.2017