2013-10-28 120 views
1
[Test] 
public void Can_Get_All() 
{ 
    var repository = new RavenRepository<Motorcycle>(); 
    repository.DeleteAll(); 

    repository.Store(new Motorcycle {Make = "Datsun", YearManufactured = 1972}); 
    repository.Store(new Motorcycle {Make = "Toyota", YearManufactured = 2002}); 

    IList<Motorcycle> savedThings = repository.GetAll(); 

    Assert.IsTrue(savedThings.Count == 2); 
} 

RavenRepository.GetAll()如何從RavenDB獲取所有文檔?

public IList<T> GetAll() 
{ 
    using (IDocumentSession session = _collection.OpenSession()) 
    { 
     return session.Query<T>().ToList(); // Throws exception 
    } 
} 

運行此測試拋出異常:

Raven.Abstractions.Exceptions.IndexCompilationException:無法理解的查詢:變量初始值選擇必須具有lambda表達式用物體創造表情

爲什麼?我如何才能從RavenDB中獲取T類型的所有文檔?

+0

我會閱讀文檔,但http://ravendb.net/已關閉了兩個小時... –

回答

2

如果你想要的是刪除一切,那麼你可以這樣做:

public class AllDocumentsById : AbstractIndexCreationTask 
{ 
    public override IndexDefinition CreateIndexDefinition() 
    { 
     return 
      new IndexDefinition 
      { 
       Name = "AllDocumentsById", 
       Map = "from doc in docs 
         let DocId = doc[\"@metadata\"][\"@id\"] 
         select new {DocId};" 
      }; 
    } 
} 

docStore.DatabaseCommands.DeleteByIndex("AllDocumentsById", new IndexQuery()); 

如果你有,你要根據刪除不同的索引那麼將正常運行好。我們也正在使用這種模式進行一些測試。

1

由於RavenDB強制執行默認分頁,所以不起作用。看看這裏:http://ayende.com/blog/161249/ravendbs-querying-streaming-unbounded-results

+0

好吧,如果我只想要其中的100個呢?這裏的問題不是我的結果集是有界的,而是這個代碼拋出一個異常。 session.Query ().Take(200).ToList()引發相同的異常。 –

+0

存儲庫模式的使用使得很難理解引擎蓋下正在發生什麼。你在查詢之前是否調用SaveChanges? – synhershko

相關問題