2013-10-28 1 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 : 쿼리를 이해 할 수 없습니다 : 변수 초기화를 선택하면 람다 식을 가지고 있어야합니다 객체 생성 표현식을 사용하여

왜? 어떻게 RavenDB에서 T 타입의 모든 문서를 얻을 수 있습니까?

+0

설명서를 읽었을지라도 http://ravendb.net/은 2 시간 동안 다운되었습니다 ... –

답변

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 개만 있으면 어떨까요? 여기서 문제는 내 결과 집합이 한정되어 있지 않다는 것입니다.이 코드는 예외를 throw합니다. session.Query () .Take (200) .ToList()는 동일한 예외를 throw합니다. –

+0

리포지토리 패턴을 사용하면 내부적으로 무슨 일이 일어나는지 이해하기가 어려워집니다. 쿼리하기 전에 SaveChanges를 호출하고 있습니까? – synhershko