Począwszy od Raven 2.5, obsługa dynamicznych obiektów wydaje się być głównie przeznaczona do czytania. Nie jest łatwo ustawić właściwości istniejącego obiektu, ponieważ Raven.Abstractions.Linq.DynamicJsonObject
, który dziedziczy DynamicObject
, implementuje tylko odczyt/wywołanie metody dynamicznego kontraktu, takie jak TryGetMember
, TryGetIndex
i TryInvokeMember
. ale żaden z elementów takich jak TrySetMember
.
Jednakże, jeśli przesyła się do IDynamicJsonObject
, zapewnia dostęp do wewnętrznego RavenJObject
, który można modyfikować.
Ten przykładowy kod powinien zilustrować jak:
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?"
}
bardzo proste rozwiązanie. Próbowałem na wiele sposobów dotrzeć do tego "wewnętrznego" obiektu. Nie wiedziałem, że wystarczy rzucić na IDynamicJsonObject, dzięki. – Quintonn