在RavenDB中修改嵌套集合中的特定项
本文关键字:嵌套 RavenDB 修改 集合 | 更新日期: 2023-09-27 18:14:08
我有一些看起来像下面的文档结构:
public class Document {
public int Id { get; set; }
public string Name { get; set; }
public List<Property> Properties { get; set; }
}
public class Property {
public int Id { get; set; }
public string Name { get; set; }
}
现在,查询和修改文档很容易。但我需要在我的应用程序中访问特定的属性实例,似乎他们不会像根文档那样自动获得ID。这似乎是RavenDB的设计。
我可能被困在关系世界中,但我想做的基本上是检索正确的文档,然后获得正确的属性,修改它并再次保存文档。
from property in document.Properties
where property.Id == someId
select property
…显然,只要
- RavenDB不自动设置Id字段或
- 我自己没有做任何id生成机制
是我完全走错了路,还是我想做的有意义?我应该将属性移出作为根节点,并在文档中对它们进行某种引用吗?或者在插入属性时应该这样做:
- 检索带有属性列表的文档
- 获取属性[last]的ID
- 添加1并在新属性中插入新ID
?
然而,这将需要至少两个请求(一个获取现有属性,一个保存更改)到数据库,对于这样一个看似简单的任务来说,这似乎很脏而且没有必要。
我发现了很多类似的帖子,但没有一个真正回答这个问题。
查看我们如何在RaccoonBlog中做到这一点:https://github.com/ayende/RaccoonBlog/blob/master/RaccoonBlog.Web/Infrastructure/Tasks/AddCommentTask.cs