首页 文章

将参数传递给存储过程时的参数异常(.net sdk)

提问于
浏览
0

我已在DocumentDb帐户的集合中创建了此存储过程 .

https://github.com/Azure/azure-documentdb-js-server/blob/a7a2db8c4abc6ce61d40e08b66358f03fd89f896/samples/stored-procedures/update.js

我在使用.NET SDK执行此操作时遇到问题,这是我的代码 .

dynamic[] procParams = new dynamic[] { "myid", "{ $set: { status : 'Draft' } }" };

return await _client.ExecuteStoredProcedureAsync<Listing>(UriFactory.CreateStoredProcedureUri("dbName", "collection", "update"), procParams);

SDK抛出ArgumentException:

“如果对象不是文档或附件,则无法序列化对象”

好像我只能传递文件或附件似乎不正确?我看过这篇博文,看起来这个家伙也在做同样但没有问题 .

那么如何将基本参数传递给存储过程,如字符串?

1 回答

  • 2

    为了澄清 - 看起来上面的异常是指将存储过程的响应反序列化到 Listing 类中的问题(与在执行存储过程之前引用序列化输入参数相反) .

    您可以通过检查存储过程作为字符串的响应来验证是否为真:

    var sprocResponse = client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("dbName", "collection", "update"), procParams).Result.Response.ToString();
    

    如果您能够以字符串形式检索更新的文档响应;这意味着存储过程成功执行,并且应该确认问题在于将存储过程响应反序列化到 Listing 类中 .

    这里常见的错误是POCO扩展Document类(而不是Resource类: Microsoft.Azure.Documents.Resource ) . 请确保 Listing 不扩展 Document ,并且可以将存储过程的响应反序列化为 Listing 类 .

相关问题