Чтение из RavenDb сразу после записи в него возвращает несогласованные данные

У меня есть процесс согласования, когда фоновый поток периодически извлекает список идентификаторов объектов из внешнего веб-сервиса и пытается добавить недостающие сущности во встроенную базу данных RavenDb. Цикл, выполняющий этот процесс, следующий:

foreach (var pageId in listOfPageIds)
{
    if ( _contentService.GetPageByPageId(pageId) == null)
    {
        _contentService.AddPage(pageId);
    }
}

реализация GetPageByPageId () и AddPage () следующая:

public Page GetPageByPageId(string pageId)
{
    using (var session = DocumentStore.OpenSession())
    {
        return session.Query<Page>().FirstOrDefault(page => page.PageId == pageId);
    }
}

public bool AddPage(string pageId)
{
    var page = GetPageByPageId(pageId);
    if (page != null)
    {
        return false;
    }
    using (var session = DocumentStore.OpenSession())
    {
        var newPage = new Page() {PageId = pageId};
        session.Store(newPage);
        session.SaveChanges();
    }
    return true;
}

Проблема в том, что если список имеет повторяющиеся идентификаторы, после добавления первого идентификатора и повторной проверки этого идентификатора результат возвращается как пустой. Это как если бы отсутствует этап завершения, на котором можно было бы зарегистрировать вновь добавленную сущность. Если я позже запрошу набор из другого потока, будет возвращена сущность с этим идентификатором. Может ли кто-нибудь увидеть, в чем проблема?

спасибо,

7
задан zx81 3 August 2014 в 23:49
поделиться