2011-05-03 8 views
9

Sto utilizzando pattern di repository con Raven DB. La mia interfaccia repository èCome attendere che i risultati vengano aggiornati in RavenDB dopo DELETE

public interface IRepository<T> where T : Entity 
{ 
    IEnumerable<T> Find(Func<T, bool> exp); 
    void Delete(T entity); 
    void Save(); 
    ... 
} 

e l'attuazione è

public class Repository<T> : IRepository<T> where T : Entity 
{ 
    public IEnumerable<T> Find(Func<T, bool> exp) 
    { 
     return session.Query<T>().Where(exp); 
    } 

    public void Delete(T entity) 
    { 
     session.Delete(entity); 
    } 

    public void Save() 
    { 
     session.SaveChanges(); 
    } 
    ... 
} 

Ho un test che segna tutte le entità per l'eliminazione, salva le modifiche e database di query per vedere se il conteggio risultato è zero

[Test] 
public void DeleteValueTest() 
{ 
    //resolve repository 
    var repository = ContainerService.Instance.Resolve<IRepository<DummyType>>(); 
    Func<DummyType, bool> dummyTypeExpr = item => item.GetType() == typeof(DummyType); 

    //find all entries of dummy types and mark for deletion 
    var items = repository.Find(dummyTypeExpr); 
    foreach (var item in items) 
    { 
     repository.Delete(item); 
    } 
    //commit changes 
    repository.Save(); 


    //populate all dummy types, shall be nothing in there 
    items = repository.Find(dummyTypeExpr); 
    int actualCount = items.Count(); 
    int expectedCount = 0; 

    Assert.AreEqual(expectedCount, actualCount); 
} 

Il test ha esito negativo con uscita campione

RepositoryTest.DeleteValueTest : FailedExecuting query '' on index 'dynamic/DummyTypes' in 'http://localhost:8080' 
Query returned 5/5 results 
Saving 1 changes to http://localhost:8080 
Executing query '' on index 'dynamic/DummyTypes' in 'http://localhost:8080' 
Query returned 4/5 results 

Expected: 0 
But was: 4 

Il problema è se eseguo questo test più volte, gli elementi vengono effettivamente rimossi (2-3 articoli alla volta). Ho visto che esiste un IDocumentQuery con metodo WaitForNonStaleResults.

IDocumentQuery<T> WaitForNonStaleResults(); 

Ma non riesco a trovarlo in Raven.Client.Lightweight namespace che è stato installato da NuGet.

Per riassumere Come attendere finché il database non viene aggiornato e come posso leggere i dati nuovi. Sto facendo qualcosa di terribilmente sbagliato? Grazie per l'aiuto!

+0

Risulta che la stessa _IDocumentQuery_ interfaccia è definita in modo diverso in ** ** stesso namespace _Raven.Client_. Tuttavia, esistono due diversi assembly che forniscono questa interfaccia: _Raven.Client.dll_ e _Raven.Client.Lightweight.dll_. NuGet mi fornisce la libreria successiva. – oleksii

+0

Raven.Client.dll non è in uso da diversi mesi, quale build stai usando? –

+0

In ogni caso, la risposta di roja è quella giusta –

risposta

Problemi correlati