我需要一些关于Raven DB及其C#API的帮助。 我想用Linq查询(使用Linq to Raven实现)执行“order by”。为此,我必须创建一个索引来实现此操作。我的架构目前已规范化,但我想对其进行非规范化,以便在其中添加自定义属性。
所以,我有:
实体A:
事实上,我只是想通过B属性订购我的As。所以我想对我的A进行非规范化以包含B属性。
因此使用RavenDB可以实现方案演变,但是为了在A中设置B属性,我必须在转换A时加载B.根据文档,这似乎是不可能的。
我不想构建一个令人毛骨悚然的程序,它将迭代每个A来加载B,但我没有看到另一个解决方案。
有什么想法吗?
感谢您的时间:)。 于连
答案 0 :(得分:1)
你不应该编写一个令人毛骨悚然的程序,而是一个强大的迁移项目,它将包含大量有用的迁移脚本。像波纹管这样的简单脚本将为您完成工作:
public void LoadAndSaveWithDenormalizedProperty()
{
using (var session = store.OpenSession())
{
int skip = 0;
const int take = 24;
while (true)
{
var items = session.Query<ItemA>()
.Customize(customization => customization.Include(x => x.ItemBId))
.Skip(skip)
.Take(take)
.ToList();
skip += items.Count;
foreach (item in items)
{
item.DenormalizedProperty =
session.Load<ItemB>(item.ItemBId).PropertyToDenormalize;
}
session.SaveChanges();
if (items.Count == 0)
break;
}
}
}