Pergunta

Preciso de ajuda sobre Raven DB e sua API C#.Quero fazer um “order by” com uma consulta Linq (com a implementação Linq to Raven).Para isso tenho que criar um índice para realizar esta ação.Meu esquema está normalizado no momento, mas quero desnormalizá-lo para adicionar uma propriedade personalizada a ele.

Então eu tenho :

Entidade A:

  • Algumas propriedades
  • O ID de uma entidade B

Na verdade, quero simplesmente ordenar meu As por uma propriedade B.Então, quero desnormalizar meu A para incluir a propriedade B.

Portanto, uma evolução de esquema é possível com RavenDB, mas para definir a propriedade B em A tenho que carregar o B ao converter o A.E parece impossível de acordo com a documentação.

Não quero construir um programa assustador que irá iterar em cada A para carregar Bs, mas não vejo outra solução.

Qualquer ideia ?

Obrigado pelo seu tempo :).Julien

Foi útil?

Solução

Você não deve escrever um programa assustador, mas um projeto de migração robusto que conterá vários scripts de migração úteis.Um script simples como o abaixo fará o trabalho para você:

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;
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top