RavendB: Доступ к экземпляру базы данных во время преобразования документа

StackOverflow https://stackoverflow.com//questions/11653008

Вопрос

Мне нужна помощь о Raven DB и его C # API. Я хочу сделать «заказ» с помощью запроса LINQ (с помощью LINQ для реализации Raven).Для этого я должен создать индекс для реализации этого действия.Моя схема в настоящее время нормализована, но я хочу денормализовать его, чтобы добавить на недвижимость на заказ.

Так, у меня есть:

Сущность A:

    .
  • Некоторые свойства
  • идентификатор объекта b

    На самом деле, я просто хочу заказать свой собственность B как B.Поэтому я хочу денормализировать мой A, включив свой собственность.

    Так что эволюция схемы возможна с RavendB, но для того, чтобы установить свойство B в A, я должен загрузить B при преобразовании A. И кажется невозможным в соответствии с документацией.

    Я не хочу строить жуткую программу, которая будет перенаселена на каждом a для загрузки bs, но я не вижу другого решения.

    Любая идея?

    Спасибо за ваше время :). Julien

Это было полезно?

Решение

Вы не должны писать жуткую программу, но прочный проект по миграциям, который проведет кучу полезных сценариев миграции.Простой скрипт, как пыльник, сделает работу для вас:

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;
        }
    }
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top