Как мне ждать обновления результатов в RavenDB после УДАЛЕНИЯ - PullRequest
9 голосов
/ 03 мая 2011

Я использую шаблон хранилища с Raven DB.Мой интерфейс репозитория

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

И реализация

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();
    }
    ...
}

У меня есть тест, который помечает все сущности для удаления, сохраняет изменения и запрашивает базу данных, чтобы увидеть, равен ли результат нулю

[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);
}

Тест не пройден с примером вывода

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

Проблема в том, что если я запускаю этот тест несколько раз, элементы фактически удаляются (2-3 элемента за раз).Я видел, что есть IDocumentQuery, у которого есть WaitForNonStaleResults метод.

IDocumentQuery<T> WaitForNonStaleResults();

Но я не могу найти его в Raven.Client.Lightweight пространстве имен, которое было установлено NuGet,

Подводя итог Как ждать обновления базы данных и как читать свежие данные.Я делаю что-то ужасно неправильно?Спасибо за вашу помощь!

1 Ответ

13 голосов
/ 04 мая 2011
Session.Query<Foo>().Customize(x=>x.WaitForNonStaleResults()) 

Обратите внимание, что это не рекомендуется использовать. Как минимум, используйте WaitForNonStaleResultsAsOfNow

Согласно ответу Айенде в:

http://groups.google.com/group/ravendb/browse_thread/thread/32c8e7e2453efed6/090b2e0a9c722e9f?#090b2e0a9c722e9f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...