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!
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
Raven.Client.dll non è in uso da diversi mesi, quale build stai usando? –
In ogni caso, la risposta di roja è quella giusta –