Estoy usando el patrón de repositorio con Raven DB. Mi interfaz de repositorio es¿Cómo espero a que los resultados se actualicen en RavenDB después de DELETE
public interface IRepository<T> where T : Entity
{
IEnumerable<T> Find(Func<T, bool> exp);
void Delete(T entity);
void Save();
...
}
y la aplicación es
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();
}
...
}
tengo una prueba que marca todas las entidades para su eliminación, guarda los cambios y base de datos de consulta para ver si el recuento resultado es cero
[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);
}
La prueba falla con la salida de muestra
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
El problema es que si realizo esta prueba varias veces, los elementos realmente se eliminan (2-3 elementos a la vez). Vi que hay una IDocumentQuery que tiene el método WaitForNonStaleResults.
IDocumentQuery<T> WaitForNonStaleResults();
Pero no puedo encontrar en Raven.Client.Lightweight espacio de nombres que fue instalado por NuGet.
Resumiendo ¿Cómo espero hasta que la base de datos se actualice y cómo leo datos recientes? ¿Estoy haciendo algo terriblemente mal? ¡Gracias por tu ayuda!
Parece que el mismo _IDocumentQuery_ interfaz se define de manera diferente en el mismo ** ** espacio de nombres _Raven.Client_. Sin embargo, existen dos ensamblajes diferentes que proporcionan esta interfaz: _Raven.Client.dll_ y _Raven.Client.Lightweight.dll_. NuGet me proporciona la biblioteca posterior. – oleksii
Raven.Client.dll no se ha usado durante varios meses, ¿qué compilación está utilizando? –
En cualquier caso, la respuesta de roja es la correcta –