RavendB: Доступ к экземпляру базы данных во время преобразования документа
-
11-12-2019 - |
Вопрос
Мне нужна помощь о 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;
}
}
}
.