As with Raven 2.5, support for dynamic objects seems to mostly relate to the read side, and it's not so easy to set properties for an existing object because Raven.Abstractions.Linq.DynamicJsonObject , which inherits DynamicObject , only implements read / call dynamic contract methods such as TryGetMember , TryGetIndex and TryInvokeMember . but none of the elements like TrySetMember .
However, if you added to IDynamicJsonObject , it provides access to an internal RavenJObject that you can manipulate.
This code example should illustrate how:
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);
source share