c# – Azure DocumentDB读取文档资源未找到

c# – Azure DocumentDB读取文档资源未找到,第1张

概述我正在构建一个.Net控制台应用程序来读取DocumentDB中的信息.控制台应用程序具有来自EventHub的数据,并在进入云时插入/更新最新数据. 我正在尝试从DocumentDB读取单个文档,我可以在请求文档之前确认文档存在. if (DocumentDBRepository<DocumentDBItem>.DoesItemExist(name)) { device = awai 我正在构建一个.Net控制台应用程序来读取documentDB中的信息.控制台应用程序具有来自EventHub的数据,并在进入云时插入/更新最新数据.

我正在尝试从documentDB读取单个文档,我可以在请求文档之前确认文档存在.

if (documentDBRepository<documentDBItem>.DoesItemExist(name)) {     device = await documentDBRepository<documentDBItem>.GetItemAsync(name); }

我使用了Microsoft的this教程,建立了一个用于访问documentDB记录的存储库,并成功地使用了几乎所有的方法.我可以更新/删除/查询数据库,但我无法读取单数项.

首先,它抛出了一个请求PartitionKey的异常.所以我修改了方法,将DB使用的PartitionKey添加到请求中.一旦我添加了PartitionKey,它就会抛出另一个异常,并显示一条消息“找不到资源

public static async Task<T> GetItemAsync(string ID){    try    {        Requestoptions options = new Requestoptions();        options.PartitionKey = new PartitionKey("deviceid");        document document = await clIEnt.ReaddocumentAsync(UriFactory.CreatedocumentUri(DatabaseID,CollectionID,ID),options);        return (T)(dynamic)document;    }    catch (documentClIEntException e)    {        if (e.StatusCode == httpStatusCode.NotFound)        {            return null;        }        else        {            throw;        }    }}

我已经修改了我的调用以使用“GetItemsAsyc”并获得IEnumerable的文档并获得列表中的第一项,但是为什么我可以使用教程中的所有其他方法但这一点仍然有效是没有意义的抛出异常说“资源未找到”.

我得到的例外情况:

"Message: {\"Errors\":[\"Resource Not Found\"]}\r\nActivityID: e317ae66-6500-476c-b70e-c986c4cbf1d9,Request URI: /apps/e842e452-2347-4a8e-8588-2f5f8b4803ad/services/2c490552-a24d-4a9d-a786-992c07356545/partitions/0281cfdd-0c60-499f-be4a-289723a7dbf9/replicas/131336364114731886s"
解决方法 如 the documentation所示,您需要提供分区键的值,而不是存储分区键的字段的名称.因此,您需要将设备ID作为参数添加到方法中,并将其值传递给PartitionKey构造函数.

从示例:

// Read document. Needs the partition key and the ID to be specifIEddocument result = await clIEnt.ReaddocumentAsync(    UriFactory.CreatedocumentUri("db","coll","xms-001-FE24C"),new Requestoptions { PartitionKey = new PartitionKey("xms-0001") });

所以对于你的代码:

public static async Task<T> GetItemAsync(string ID,string deviceid){    try    {        Requestoptions options = new Requestoptions();        options.PartitionKey = new PartitionKey(deviceid);        document document = await clIEnt.ReaddocumentAsync(UriFactory.CreatedocumentUri(DatabaseID,options);        return (T)(dynamic)document;    }    catch (documentClIEntException e)    {        if (e.StatusCode == httpStatusCode.NotFound)        {            return null;        }        else        {            throw;        }    }}
总结

以上是内存溢出为你收集整理的c# – Azure DocumentDB读取文档资源未找到全部内容,希望文章能够帮你解决c# – Azure DocumentDB读取文档资源未找到所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存