2011-08-21 5 views
4

Supposons que j'ai le domaine suivant:RavenDB - Patcher dans la collecte de références dénormalisées

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 changement d'acteur que je veux vous assurer que tous les films référencement sont mis à jour. Par conséquent, je crée d'abord un indice qui me laisse 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, je voudrais maintenant tirer le patch-commande ...

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 m'aider s'il vous plaît à compléter ce bloc de code ci-dessus, puisque je n'ai absolument aucune idée, comment je ne peux que mettre à jour le nom des références dénormalisées qui représentent l'acteur changé. Je crains que RavenDB ne supporte pas ce genre de demande de patch et que je doive charger et stocker tous les films manuellement, ce que je voudrais absolument éviter pour des raisons de performances. RavenDB ne prend pas en charge la correction basée sur les critères.

Répondre

1

Vous pouvez résoudre votre problème sans références dénormalisées et en utilisant include au moment de la lecture