Как я могу вызвать хранимую процедуру на CosmosDb с пользовательской сериализацией с. net Sdk версии 3? - PullRequest
0 голосов
/ 21 января 2020

Что я хочу сделать, это вызвать SP с заданной c Json конфигурацией сериализации с использованием космоса. net Sdk версия 3.

С версией 2 я мог бы сделать это, установив RequestOptions Свойство JsonSerializerSettings в вызове.

Теперь с версией 3 у меня нет этой опции, единственное, что у меня есть, это установить пользовательскую конфигурацию на уровне объекта клиента.

Это единственный вариант доступен? Я должен создать новый клиент для каждой конфигурации?

Заранее спасибо

1 Ответ

0 голосов
/ 21 января 2020

Вы можете позвонить ExecuteStoredProcedureStreamAsync. Ссылка: https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos/src/Resource/Scripts/Scripts.cs#L434

Это подпись:

public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
    string storedProcedureId,
    PartitionKey partitionKey,
    dynamic[] parameters,
    StoredProcedureRequestOptions requestOptions = null,
    CancellationToken cancellationToken = default(CancellationToken));

Это означает, что она вернет вам ResponseMessage, с Content (поток ) вы можете десериализовать как хотите.

Если то, что вы хотите сериализовать, есть другой метод:

 public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
            string storedProcedureId,
            Stream streamPayload,
            PartitionKey partitionKey,
            StoredProcedureRequestOptions requestOptions = null,
            CancellationToken cancellationToken = default(CancellationToken));

, где streamPayload - это Stream. Пример использования: https://github.com/Azure/azure-cosmos-dotnet-v3/blob/fad3daf789458bc73256d4b26bdd1e4cfc83b2ad/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/StoredProcedureTests.cs#L474

MemoryStream streamPayload = new MemoryStream(Encoding.UTF8.GetBytes(@"[""one"",""two"",""three""]"));

ResponseMessage response = await this.scripts.ExecuteStoredProcedureStreamAsync(
    storedProcedureId: sprocId,
    streamPayload: streamPayload,
    partitionKey: new Cosmos.PartitionKey(testPartitionId),
    requestOptions: null,
    cancellationToken: default(CancellationToken));
...