如何传递分区键来执行存储过程?

How do you pass a PartitionKey to Execute a StoredProcedure?

我正在尝试从 .net SDK (v1.6.3) 对分区集合(服务器端分区)执行存储过程。

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

我收到错误 "PartitionKey value must be supplied for this operation"。事实上,当我使用 Script Explorer 时,我在 Azure 门户中看到了这个错误。但是,我看不到添加 PartitionKey 的方法。这是现在 API 和分区集合的限制,还是我遗漏了什么?

您可以通过将重载的 ExecuteStoredProcedureAsync 方法与 RequestOptions 结合使用来传入分区键。例如,

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

我收到了一个类似的错误,发现我在创建文档集合时有一个不正确的 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);