我有以下代码打开与RavenDB的会话,获取相关ID,使用这些想法加载实体,更改它们,最后保存它们。
List<EventDescriptor> events;
using (var session = raven.OpenSession())
{
session.Store(aggregate);
session.SaveChanges();
events = (from descriptor in session.Query<EventDescriptor>() where descriptor.AggregateId == aggregate.Id select descriptor).ToList();
}
using (var session = raven.OpenSession())
{
foreach (var @event in events)
{
var e = session.Load<EventDescriptor>("EventDescriptors/" + @event.Id.ToString());
e.Saved = true;
}
session.SaveChanges();
}
问题是,实体中的更改似乎没有被跟踪,即使加载了对象,我也无法删除实体(给我未知的实体错误)。我已经尝试在循环中调用SaveChanges,但这也没有帮助。我查看了Raven的文档,但我不知道我在这里做错了什么。
答案 0 :(得分:2)
是的,我们无法跟踪结构的更改,因为每次更改它们时,都会创建一个新副本
答案 1 :(得分:1)
问题是EventDescriptor是一个结构,而不是一个类。改变这解决了问题。我假设它是因为struct是一个valuetype而不是referencetype。