Bir DocumentDB'deki bilgileri okumak için bir .Net Console uygulaması yapıyorum. Konsol uygulamasının bir EventHub'dan gelen verileri vardır ve yeni verilere bulutta geldikçe ekler/günceller.Azure DocumentDB Belge Kaynaklarını Bulunamadı
DocumentDB'den tekil bir belgeyi okumaya çalışıyorum ve Belge istemeden önce Belgenin Var olduğunu doğrulayabilirim.
if (DocumentDBRepository<DocumentDBItem>.DoesItemExist(name))
{
device = await DocumentDBRepository<DocumentDBItem>.GetItemAsync(name);
}
Ben DocumentDB kayıtlarına erişim için bir Deposu yapımı ile ilgili Microsoft'tan this öğretici kullanılan ve hemen hemen tüm yöntemlerin kullanmada başarılı oldu. DB'yi güncelleyebilir/silebilir/sorgulayabilirim ama tekil bir Öğeyi okuyamıyorum.
İlk önce PartitionKey isteyen bir istisna atıyordu. Bu nedenle, DB tarafından istekte kullanılan PartitionKey eklemek için yöntemi değiştirdim. En kısa sürede ben
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;
}
}
}
Zaten Belgelerinin bir IEnumerable "GetItemsAsyc" kullanmak ve almak için aramalarıma modifiye ettik "Not Found Kaynak" Bir mesaj ile başka istisna atar PartitionKey ekledi olarak ve Listedeki ilk öğeyi al, ancak öğreticiden diğer tüm yöntemleri kullanabilmem için mantıklı değil ama bu "Kaynak Bulunamadı" diyerek istisnalar atmaya devam ediyor.
İstisna ben alıyorum: the documentation gösterildiği gibi
"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"
Bu, aradığınız belge için kesinlikle doğru bölüm anahtarı mıdır ve onun değerini (kodunuzda göremediğim) belirtmeniz gerektiğini düşünüyorum. Ben sizin için çok benzer bir kod kullanıyorum, bölüm anahtarı hariç (desteklemeyen daha düşük bir teklif verimi kullandığım için) ve iyi çalışıyor. –
DB için kullanıyorum tek bölüm anahtarıdır ve yönteme geçiriyorum kimliği PartitionKey olarak anahtardır. Bu durumda 'DeviceId'. –
Benim durumumda, bölüm anahtarını bir tamsayı olarak kaydetmekteydim, ancak bunu bir dizge olarak arıyordum, bu yüzden çalışmıyordu.Bir kez ben düzgün çalıştığı düzeltildi – joalcego