RavenDB - исправление в коллекции денормализованных ссылок - PullRequest
4 голосов
/ 21 августа 2011

Предположим, у меня есть следующий домен:

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

Теперь, если имя актера меняется, я хочу убедиться, что все ссылки на фильмы также обновляются. Поэтому я сначала создаю индекс, который позволяет запрашивать все фильмы, в которых участвует конкретный актер:

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

Хорошо, теперь я бы хотел запустить команду патча ...

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

Может ли кто-нибудь помочь мне завершить этот блок кода выше, поскольку я абсолютно не представляю, как я могу обновить только название денормализованных ссылок, которые представляют измененный актер.

Боюсь, RavenDB не поддерживает такого рода запрос патча, и мне нужно загружать и хранить все фильмы вручную, чего я определенно хотел бы избежать по соображениям производительности.

1 Ответ

1 голос
/ 22 августа 2011

RavenDB не поддерживает создание исправлений на основе критериев. Вы можете решить вашу проблему без денормализованных ссылок и используя include во время чтения

...