2014-06-13 19 views
6

Böyle bir şey koda sahip: Ben çözemiyorum neRavenDB dinamik nesneler

using (var session = DocumentStore.OpenSession()) 
{ 
    var dbItem = session.Load<dynamic>(item.Id);  
    if (dbItem is DynamicJsonObject) 
    { 
     dbItem["PropertyName"] = "new value"; 
    } 
    session.SaveChanges(); 
} 

dbItem özelliklerini güncellemek için nasıl.
Kimse ne yapacağını biliyor mu? Mülk adına doğrudan erişmeyi denedim: dbItem.PropertyName Ayrıca ExpandoObject, IDictionary ve daha fazlasına döküm yapmayı denedim. Ama hiçbir şey işe yaramıyor gibi görünüyor.

cevap

3

Raven 2.5'ten itibaren, dinamik nesneler için destek, çoğunlukla nesnelerin okuma tarafı için görünüyor ve , yalnızca okuma/çağırma uygulayan Raven.Abstractions.Linq.DynamicJsonObject, çünkü varolan bir nesnede özellikleri ayarlamak o kadar kolay değil Dinamik sözleşmenin yöntemleri, TryGetMember, TryGetIndex ve TryInvokeMember gibi. ancak TrySetMember gibi öğelerin hiçbiri. Ancak, IDynamicJsonObject'a yayın yaparsanız, işlem yapabileceğiniz iç RavenJObject'a erişim sağlar.

Bu kod örneği nasıl göstermek gerekir:

using (var session = store.OpenSession()) 
{ 
    dynamic entity = new ExpandoObject(); 
    entity.Id = "DynamicObjects/1"; 
    entity.Hello = "World"; 
    session.Store(entity); 
    session.SaveChanges(); 
} 

using (var session = store.OpenSession()) 
{ 
    var json = session.Load<dynamic>("DynamicObjects/1") as IDynamicJsonObject; 
    json.Inner["Name"] = "Lionel Ritchie"; 
    json.Inner["Hello"] = "Is it me you're looking for?"; 
    session.SaveChanges(); 
} 

using (var session = store.OpenSession()) 
{ 
    dynamic loadedAgain = session.Load<dynamic>("DynamicObjects/1"); 
    Console.WriteLine("{0} says Hello, {1}", loadedAgain.Name, loadedAgain.Hello); 
    // -> Lionel Ritchie says Hello, Is it me you're looking for?" 
} 
+0

Çok basit bir çözüm. Bu 'iç' nesneye ulaşmak için birçok yol denedim. Sadece IDynamicJsonObject’e atıldığını bilmiyordum, teşekkürler. – Quintonn