DocumentDBの情報を読み取るための.Netコンソールアプリケーションを構築しています。コンソールアプリケーションは、EventHubからのデータを受け取り、クラウドに入ってくる最新のデータを挿入/更新します。Azure DocumentDBドキュメントリソースが見つかりません。
私はDocumentDBから単数の文書を読むことを試みており、文書を要求する前にその文書が存在することを確認できます。
if (DocumentDBRepository<DocumentDBItem>.DoesItemExist(name))
{
device = await DocumentDBRepository<DocumentDBItem>.GetItemAsync(name);
}
私はDocumentDBレコードにアクセスするためのリポジトリの構築について、マイクロソフトからthisチュートリアルを使用して、ほとんどすべてのメソッドのを使ってで成功しました。私はDBを更新/削除/クエリすることができますが、私は特異なItemを読むことができません。
まず、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"
これは間違いなくあなたが探しているドキュメントの正しいパーティションキーですか、あなたはその値を指定する必要があると思います(あなたのコードでは見えません)?パーティションキーなしで(私がそれをサポートしていないより低いオファースループットを使用しているので)、あなたのものに非常によく似たコードを使用しています。 –
これは私がDBに使用している唯一のパーティションキーです。メソッドに渡すIDはPartitionKeyのKeyです。この場合は「DeviceId」です。 –
私の場合は、パーティションキーを整数として保存していましたが、文字列として検索していたため、機能しませんでした。一度私はそれが正常に動作することを修正しました – joalcego