从Raven 2.5开始,对动态对象的支持似乎主要用于事物的读取方面,并且在现有对象上设置属性并不那么容易,因为Raven.Abstractions.Linq.DynamicJsonObject
(继承DynamicObject
)仅实现读/调用动态合同的方法,如TryGetMember
,TryGetIndex
和TryInvokeMember
。但没有像TrySetMember
这样的项目。
但是,如果转换为IDynamicJsonObject
它提供了访问内部RavenJObject
,您可以操控。
此代码示例应该说明如何:
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?"
}
非常简单的解决方案。我尝试了很多方法来达到这个“内在”的对象。不知道刚刚铸造IDynamicJsonObject会做的伎俩,谢谢。 – Quintonn