У меня есть процесс согласования, при котором фоновый поток периодически извлекает список идентификаторов объектов из внешнего веб-сервиса и пытается добавить отсутствующие объекты во встроенную базу данных 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;
}
Проблема заключается в том, что если списокимеет повторяющиеся идентификаторы, после добавления первого идентификатора и повторной проверки этого идентификатора результат возвращается пустым.Как будто отсутствует этап завершения, который бы регистрировал вновь добавленную сущность.Если позднее я сделаю запрос к набору из другого потока, будет возвращена сущность с указанным идентификатором.Кто-нибудь может увидеть, в чем здесь проблема?
спасибо,