gpt4 book ai didi

c# - RavenDB 动态对象

转载 作者:太空狗 更新时间:2023-10-29 21:44:35 24 4
gpt4 key购买 nike

我的代码看起来像这样:

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

我想不通的是如何更新 dbItem 的属性。
有谁知道该怎么办?我试过像这样直接访问属性名称:dbItem.PropertyName我还尝试转换为 ExpandoObject、IDictionary 等。但似乎没有任何效果。

最佳答案

从 Raven 2.5 开始,对动态对象的支持似乎主要用于事物的读取方面,并且在现有对象上设置属性并不那么容易,因为 Raven.Abstractions.Linq.DynamicJsonObject,继承了DynamicObject,只实现了动态合约的读取/调用方法,如TryGetMemberTryGetIndexTryInvokeMember。但没有像 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?"
}

关于c# - RavenDB 动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24208510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com