1

我需要一些有关 Raven DB 及其 C# API 的帮助。我想使用 Linq 查询(使用 Linq to Raven 实现)进行“排序”。为此,我必须创建一个索引来实现此操作。我的架构当前已规范化,但我想对其进行非规范化以便在其中添加自定义属性。

所以我有 :

实体 A:

  • 一些财产
  • B实体的ID

事实上,我只是想通过 B 属性订购我的 As。所以我想将我的 A 非规范化以包含 B 属性。

因此,使用 RavenDB 可以进行方案演变,但是为了在 AI 中设置 B 属性,必须在转换 A 时加载 B。根据文档,这似乎是不可能的。

我不想构建一个令人毛骨悚然的程序,它会在每个 A 上迭代以加载 B,但我没有看到其他解决方案。

任何的想法 ?

感谢您的时间 :)。朱利安

4

1 回答 1

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;
        }
    }
}
于 2012-07-26T06:52:20.590 回答