2011-08-20 10 views
9

que tiene la siguiente prueba para el despegue de salto -RavenDB Paging Comportamiento

[Test] 
    public void RavenPagingBehaviour() 
    { 
     const int count = 2048; 
     var eventEntities = PopulateEvents(count); 
     PopulateEventsToRaven(eventEntities); 

     using (var session = Store.OpenSession(_testDataBase)) 
     { 
      var queryable = 
       session.Query<EventEntity>().Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).Skip(0).Take(1024); 

      var entities = queryable.ToArray(); 

      foreach (var eventEntity in entities) 
      { 
       eventEntity.Key = "Modified"; 
      } 

      session.SaveChanges(); 

      queryable = session.Query<EventEntity>().Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).Skip(0).Take(1024); 

      entities = queryable.ToArray(); 

      foreach (var eventEntity in entities) 
      { 
       Assert.AreEqual(eventEntity.Key, "Modified"); 
      } 
     } 
    } 

PopulateEventsToRaven simplemente añade 2.048 documentos muy simples a la base de datos.

La primera combinación de saltos toma los primeros 1024 duplicados modifica los documentos y luego confirma los cambios.

La siguiente combinación de toma de omisión nuevamente quiere obtener los primeros 1024 documentos pero esta vez obtiene el número de documento 1024 a 2048 y, por lo tanto, no pasa la prueba. ¿Por qué es esto, esperaría el primer 1024 otra vez?

Editar: He varificado que si no modifico los documentos, el comportamiento es correcto.

Respuesta

12

El problema es que no especifica un pedido por, y eso significa que RavenDB es libre de elegir con elementos para devolver, que no necesariamente van a ser los mismos elementos que devolvió en la llamada anterior. Use un OrderBy y será consistente.