2016-11-08 60 views
0

我在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

回答

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類。

相關問題