RavenDB:acesso à instância do banco de dados durante a conversão do documento
-
11-12-2019 - |
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
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;
}
}
}