Pregunta

Necesito ayuda sobre Raven DB y su C # API. Quiero hacer un "pedido" con una consulta LINQ (con la implementación de Linq a Raven).Para ello, tengo que crear un índice para realizar esta acción.Mi esquema se normaliza actualmente, pero quiero negarlo de nemormalizarlo para agregar una propiedad personalizada.

Entonces, tengo:

Entidad A:

  • alguna propiedad
  • El ID de una entidad B

    De hecho, simplemente quiero ordenar mi propiedad como BS.Así que quiero negarme de neormalizar a mi A incluir la propiedad B.

    Por lo tanto, una evolución de esquemas es posible con RAVENDB, pero para configurar la propiedad B en un AM tengo que cargar la B cuando se convierte en la A. y parece imposible de acuerdo con la documentación.

    No quiero construir un programa espeluznante que itará en cada una para cargar BS, pero no veo otra solución.

    ¿Alguna idea?

    Gracias por su tiempo :). Julien

¿Fue útil?

Solución

No debe escribir un programa espeluznante, sino un proyecto de migraciones robusto que mantendrá un montón de guiones de migración útiles.Un script simple como el brote hará el trabajo para usted:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top