2013-08-28 50 views
0

我有一個索引:只有RavenDB地圖索引AsProjection後返回空值<T>

public class TestIndex : AbstractIndexCreationTask<Resource> 
    { 
     public class Result 
     { 
      public string Caption { get; set; } 
      public string TestVal{ get; set; } 
     } 
     public TestIndex() 
     { 
      Map = resources => from r in resources 
           select new 
           { 
            Caption = r.Caption, 
            TestVal = r.Caption 
           }; 

     } 
    } 

這就是我如何查詢它:

  var data = session.Query<Resource, TestIndex>() 
           .Customize(x => x.WaitForNonStaleResults()) 
           .AsProjection<TestIndex.Result>() 
           .ToList(); 

的問題是,經過查詢名爲testVal的屬性爲null對於每個對象,標題填充期望值時。

回答

1

如果你想從索引做投影,你需要存儲值

1

我有類似的問題,在索引查詢還是retruned空值。事實證明,我做了快速測試 - 在每個程序運行索引也跑了之後,它沒有足夠的時間完成積分。在這種情況下sulution是使用customization.WaitForNonStaleResultsAsOfNow():

Query<ResultType,IndexType>() 
.Customize(customization => customization.WaitForNonStaleResultsAsOfNow()) //this is imprtant when you using quick tests, not in production server 
.Where(...).AsProjection<ResultType> 

您還需要記住的存儲從索引數據DB和索引類的用途:

StoreAllFields(FieldStorage.Yes);