2015-04-19 14 views
5

Başarısız; eksik - - 'id' gereken özellikler nedeniyle [ "giriş içeriği geçersiz "," İstek yükü geçersizdir. Geçerli bir istek yükü sağladığından emin olun. "]DocumentDB ReplaceDocument ReplaceDocumentAsync çağrılırken .NET SDK, aşağıdaki hatayı alıyorum kullanarak Azure DocumentDB yılında

Yeni bir yorum eklendiğinde, bir belgeyi aldığımda, yorumu ekledim ve ReplaceDocumentAsync'i çağırdığım bir blog yazısı senaryosudur. İşte bunun için gereken adımları:

string query = "SELECT * FROM Posts p WHERE p.id = 'some guid'"; 

var post = Client.CreateDocumentQuery<Post>(Collection.DocumentsLink, query) 
.AsEnumerable().FirstOrDefault(); 

post.Comments.Add(comment); 

Document doc = Client.CreateDocumentQuery(Collection.DocumentsLink) 
      .Where(d => d.Id == id) 
      .AsEnumerable() 
      .FirstOrDefault(); 

var document = await Client.ReplaceDocumentAsync(doc.SelfLink, item); 

Mesaj sınıfı:

public class Post 
{ 
    public Post() 
    { 
     Comments = new List<Comment>(); 
    } 

    public Guid Id { get; set; } 
    public List<Comment> Comments { get; set; } 
    ... 
} 

yanlış yapıyorum?

cevap

10

Document doc = Client.CreateDocumentQuery(Collection.DocumentsLink) 
 
      .Where(d => d.Id != null) 
 
      .Where(d => d.Id == id) 
 
      .AsEnumerable() 
 
      .FirstOrDefault(); 
 
​
boş = kimliği için kontrol etmeliyiz. DocumentDB'deki her bir belgenin "id" özelliğine sahip olması gerekir. Bir sınıfa sahip değilse, bir tane atar ve belgeye kaydedilir. DocumentDB'nin büyük/küçük harfe duyarlı olması durumunda, "Kimlik" leri başka bir özellikti ve ayrı bir "id" eklenmiş ve belgeye atanmıştı.

silerek ve kimliği için aşağıdaki kodu kullanarak tüm belgeleri yeniden oluşturarak sorunu giderilmiştir: Hossein belirtildiği gibi

[JsonProperty(PropertyName = "id")] 
public Guid Id { get; set; } 
+0

Yup - değiştirdiğiniz belgenin gövdesinde "id" nin bulunduğundan emin olmalısınız. Sadece açıklığa kavuşturmak için - bir "id" sadece bir belge oluştururken mevcut değilse otomatik olarak oluşturulur. 'id', değiştirmede otomatik olarak oluşturulmuyor (bu nedenle hata mesajı). –

+0

DocumentDb'nin beklediği özelliğin adını değiştirmenin herhangi bir yolu var mı (JsonProperty'nin özniteliğini nesneye veya JObject'e eklemenin aksine (çeşitli karmaşık ve içeriğe duyarlı nedenlerden dolayı bunu kolayca yapamam). Örneğin, DocumentDb'ye "id" veya "DocId" veya "id" yerine bunun gibi bir şeyi kullanmasını söyleyin. –

-4

Ben bunu anladım Tamam

0

, sen 'kimlik' bir özelliği seri şekilde sınıf değiştirebilirsiniz (harf duyarlı) .

Alternatif olarak, böyle bir şey yapabilirsiniz:

dynamic json = JObject.FromObject(item); 
json.id = doc.Id; 
var document = await Client.ReplaceDocumentAsync(doc.SelfLink, json); 

Böylece kendi 'id' özelliği bulunuyor uygulamak için öğeyi zorlayarak değil.

İlgili konular