4 votes

RavenDB - Parcheando dans une collection de références dénormalisées

Supposons que j'ai le domaine suivant :

public class Movie
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List<ActorReference> Actors { get; set; }
}

public class Actor
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Biography { get; set; }
    public string AnotherDetailProperty { get; set; }
}

public class ActorReference
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Maintenant, si le nom d'un acteur change, je veux m'assurer que toutes les vidéos de référence sont également mises à jour. Par conséquent, je crée d'abord un index qui me permet d'interroger tous les films dans lesquels un acteur spécifique est impliqué :

public class Movies_ByActorId : AbstractIndexCreationTask<Movie>
{
    public Movies_ByActorId()
    {
        Map = movies => from movie in movies
                        from actor in movie.Actors
                        select new { ActorId = actor.Id };
    }
}

Ok, maintenant je voudrais lancer la commande patch...

Session.Advanced.DatabaseCommands.UpdateByIndex(
    "Movies/ByActorId",
    new IndexQuery
    {
        Query = "ActorId:" + actorWhoseNameHasChanged.Id
    },
    new[]
    {
        new PatchRequest
        {
            Type = PatchCommandType.Modify,
            Name = "Actors",
            Nested = new[]
            {
                // WHAT TO DO HERE?
            }
        }
    },
    allowStale: false);

Quelqu'un pourrait-il m'aider à compléter le bloc de code ci-dessus, car je n'ai absolument aucune idée de la façon dont je peux seulement mettre à jour le nom des références dénormalisées qui représentent l'acteur modifié.

Je crains que RavenDB ne prenne pas en charge ce type de demande de patch et que je doive charger et stocker manuellement tous les films, ce que je voudrais absolument éviter pour des raisons de performances.

1voto

frontsideair Points 221

RavenDB ne prend pas en charge les Parcheando basés sur des critères. Vous pouvez résoudre votre problème sans références dénormalisées et en utilisant l'inclusion au moment de la lecture.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X