Mam proces uzgadniania, w którym przez wątek tła, który okresowo pobiera listę identyfikatorów obiektów z zewnętrznego serwisu WWW i próbuje dodać brakujące elementy do osadzonej bazy danych RavenDb. Pętla, który wykonuje ten proces jest następujący:Czytanie z RavenDb natychmiast po napisaniu do niego zwraca niespójne dane
foreach (var pageId in listOfPageIds)
{
if (_contentService.GetPageByPageId(pageId) == null)
{
_contentService.AddPage(pageId);
}
}
realizacja GetPageByPageId()
i AddPage()
są następujące:
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;
}
Problemem jest to, że jeśli lista zawiera zduplikowane identyfikatory, po to dodaje pierwszy identyfikator i ponownie sprawdza ten identyfikator, wynik wraca jako pusty. Wygląda to tak, jakby brakowało etapu finalizacji, który rejestrowałby nowo dodany podmiot. Jeśli zapytanie o zestaw z innego wątku w późniejszym czasie, zwracana jest encja o podanym identyfikatorze. Czy ktokolwiek może zobaczyć, o co chodzi?
Dzięki,
Dzięki za szybką odpowiedź, to był problem! – ambog36