向存储过程(.net sdk)传递参数时出现异常

本文关键字:参数 异常 存储过程 net sdk | 更新日期: 2023-09-27 18:17:13

我已经在我的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:

"如果对象不是文档或附件,则不能序列化该对象"

似乎我只能传递文档或附件,这似乎是不对的?我看到了这篇博客文章,看起来这个人也在做同样的事情,但没有问题。

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

向存储过程(.net sdk)传递参数时出现异常

澄清一下——上面的异常似乎是指将存储过程的响应反序列化到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类。