2012-07-25 40 views
1

我需要一些關於Raven DB及其C#API的幫助。 我想用Linq查詢(使用Linq to Raven實現)執行「order by」。要做到這一點,我必須創建一個索引來實現這個動作。我的模式目前已規範化,但我想將其非規範化以便在其中添加自定義屬性。RavenDB:在文檔轉換過程中訪問數據庫實例

所以,我有:

實體答:

  • 一些財產
  • A B實體

其實,我只是想通過訂購我當ID B財產。所以我想對我的A進行非規範化以包含B屬性。

因此,一個方案的演變是可能的RavenDB,但爲了設置乙屬性在A我不得不加載轉換A.答根據文件。

我不想構建一個令人毛骨悚然的程序,它將在每個A上迭代以加載Bs,但我沒有看到另一個解決方案。

有什麼想法?

謝謝你的時間:)。 Julien

回答

1

你不應該寫一個令人毛骨悚然的程序,而是一個強大的遷移項目,它將包含一些有用的遷移腳本。像波紋管這樣的簡單腳本將爲您完成這項工作:

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

您可能需要在此處添加一個Include,以便安全起見。 – 2012-07-26 07:51:19

+0

@AyendeRahien是的,那是對的。如果你願意,這種方式可以使用1024分之一。 – 2012-07-26 08:33:09