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

问题描述:

我在DocumentDb帐户的集合中创建了此存储过程。将参数传递给存储过程(.net sdk)时的参数异常

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:

“不能序列化对象,如果它不是文件或附件”

好像我只能通过文档的或附件这看起来不正确? 我偶然发现了这篇博客文章,看起来这个人也是这样做的,但没有问题。

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

+0

查看[this issue](https://github.com/Azure/azure-documentdb-dotnet/issues/120) – stuartd

+0

@stuartd我看到了 - 但在此期间没有解决方法可以在任何地方找到我的问题传递字符串等基本参数。 – SimonGates

+0

没有解决方法 - 该对象必须源自文档或附件,如源代码所示。 – stuartd

澄清 - 看起来上面的例外是指将存储过程的响应反序列化到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类。