Domanda

Ho bisogno di aiuto per il raven db e il suo c # API. Voglio fare un "ordine per" con una query LINQ (con l'implementazione LINQ a Raven).Per fare ciò devo creare un indice per realizzare questa azione.Il mio schema è attualmente normalizzato, ma voglio denuncilizzarlo per aggiungere una proprietà personalizzata in esso.

Allora, ho:

Entità A:

    .
  • Alcune proprietà
  • L'ID di un'entità B

    In effetti, voglio semplicemente ordinare il mio come da una proprietà B.Quindi voglio denormalizzare il mio A per includere la proprietà B.

    Quindi un schema Evolution è possibile con Ravendb, ma per impostare la proprietà B in A Devo caricare la B quando si convertono A. E sembra impossibile secondo la documentazione.

    Non voglio costruire un programma raccapricciante che ipererà su ciascuna A per caricare BS ma non vedo un'altra soluzione.

    Qualche idea?

    Grazie per il tuo tempo :). Julien

È stato utile?

Soluzione

Non dovresti scrivere un programma inquietante, ma un robusto progetto di migrazioni che terrà un sacco di script di migrazione utili.Una semplice sceneggiatura come il muggito farà il lavoro per te:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top