Tôi có quy trình đối chiếu trong đó một chuỗi nền định kỳ truy xuất danh sách các id đối tượng từ một dịch vụ web bên ngoài và cố thêm các thực thể còn thiếu vào cơ sở dữ liệu RavenDb được nhúng. Vòng lặp mà thực hiện quá trình này là như sau:Đọc từ RavenDb ngay lập tức sau khi ghi để trả về dữ liệu không phù hợp
foreach (var pageId in listOfPageIds)
{
if (_contentService.GetPageByPageId(pageId) == null)
{
_contentService.AddPage(pageId);
}
}
thi hành GetPageByPageId()
và AddPage()
như sau:
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;
}
Vấn đề là rằng nếu danh sách có id trùng lặp, một khi nó thêm id đầu tiên và kiểm tra cho id đó một lần nữa, kết quả trở lại như trống. Nó giống như một bước hoàn tất bị thiếu mà sẽ đăng ký thực thể mới được thêm vào. Nếu tôi truy vấn tập hợp từ một luồng khác vào lúc sau, thực thể với id đã cho đó được trả về. Có ai có thể thấy vấn đề ở đây không?
cảm ơn,
Cảm ơn phản hồi nhanh, đó thực sự là vấn đề! – ambog36