2011-08-21 79 views
4

的集合打補丁假設我有以下領域:RavenDB - 在非規範化的引用

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

有人可以幫我完成上面的代碼塊,因爲我完全不知道,我怎麼只能更新代表已更改actor的非規範化引用的名稱。

恐怕RavenDB不支持這種補丁請求的,我需要手動加載和存儲所有的電影,這是我肯定會想避免因爲性能原因。

回答

1

RavenDB不支持做基於標準的修補。 您可以解決您的問題,而不需要非標準化的參考文獻,並可在讀取時使用include。