Question

J'ai besoin d'aide sur Raven DB et son API C #. Je veux faire une "commande par" avec une requête LINQ (avec la mise en œuvre de Linq à Raven).Pour ce faire, je dois créer un index pour réaliser cette action.Mon schéma est actuellement normalisé, mais je veux le dénormaliser afin d'ajouter une propriété personnalisée dedans.

Alors, j'ai:

entité A:

  • de la propriété
  • L'ID d'une entité B

    En fait, je veux simplement commander mon comme une propriété B.Donc, je veux dénormaliser mon A pour inclure la propriété B.

    Donc, une évolution du schéma est possible avec Ravendb, mais afin de définir la propriété B dans une mesure, je dois charger le B lors de la conversion de l'A. et il semble impossible en fonction de la documentation.

    Je ne veux pas construire un programme effrayant qui ira déterrera sur chacun A à charger BS mais je ne vois pas une autre solution.

    aucune idée?

    Merci pour votre temps :). Julien

Était-ce utile?

La solution

Vous ne devez pas écrire un programme effrayant, mais un projet de migrations robustes qui tiendra un tas de scripts de migration utiles.Un script simple comme le ci-dessous fera le travail pour vous:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top