2015-05-07 13 views
12

DocumentDB'ye bazı garip davranışlar kaydediyorum.Azure DocumentDB belge sınıflarım Microsoft.Azure.Documents.Document öğesinden devralmalı mıdır?

var person = new Person { ... }; 
client.CreateDocumentAsync(myCollectionLink, person); 

Bu iyi çalıştı:

public class Person 
{ 
    public string Name; 
    public int Age; 
} 

böyle bu belgeleri kaydedilmiş: Bu gibi görünen bir düz eski sınıfını kullanarak tasarruf belgeleri başladı. Özellikler sınıftaki isimlerle tam olarak kaydedildi. Sonra, güncellemeleri ve silmeleri yapmak için belgenin SelfLink'e ihtiyacım olduğunu anladım. "Ah," diye düşündüm. "Ben de öyle gibi belgeden türetmek sadece edeceğiz:

public class Person: Microsoft.Azure.Documents.Document 
{ 
    public string Name; 
    public int Age; 
} 

Ancak, bu değişikliği yapan benim için sürpriz, çok, yeni belgeler tamamen boş oluşturulan hariç 'DocumentDB kendisi tarafından atanan kimliği' özelliği .. Ben açıkça şöyle [JsonProperty] ile her biri süslemeleri sürece

Ben Belge DOĞAR kaydedilmesini belgede benim özel özellikler önler birden çok kez iki kez kontrol ...

...:

public class Person: Document 
{ 
    [JsonProperty(PropertyName="name")] 
    public string Name; 

    [JsonProperty(PropertyName="age")] 
    public int Age; 
} 

Sonra tekrar çalışır (tabii ki, daha yeni JSON-uygun camelCase özellik adlarını kullanarak). Ve, geri alma üzerine, nesneler, güncellemeler ve silmeler için ihtiyacım olan SelfLink özelliği ile doldurulur. Hepsi iyi.

Sorularım gereğince ... Bu neden oldu? Belge'den türeyen bir şey yanlış mı yapıyorum? Görüşleriniz çok takdir edilecektir.

cevap

20

Bu davranış, JSON.NET'in dinamik nesnelerdeki özelliklerle nasıl çalıştığıyla ilişkilendirilmiştir. JsonProperty özniteliği ile dekore etmedikçe bunları etkin bir şekilde yok sayar.

Düz POCO ile çalışabilir ya da Belge'nin kendisinin kapsadığı statik bir nesne olan Kaynak'tan (aşağıda gösterilmektedir) yararlanabilirsiniz.

public class Person: Microsoft.Azure.Documents.Resource 
{ 
    public string Name; 
    public int Age; 
} 
+0

Teşekkürler Ryan! Bu gerçekten daha iyi çalışıyor. Bir takip sorusu - en iyi uygulama olarak tercih edilen özel bir yaklaşımdır (Belge + Öznitelik Kaynağı)? –

+2

Tamamen beni kurtardı. Hayatım boyunca böyle bir belge bulamadım. Teşekkür ederim –

+0

Sevindim Bunu gördüm, Belgelerden çalışmanın neden devralmadığını anlamaya çalışan bir saat için saçımı çekiyorum. –

İlgili konular