私は、外部WebサービスからオブジェクトIDのリストを定期的に取得し、埋め込まれた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;
}
問題は、それが追加されます一度リストは、重複したIDを持っている場合ということです最初のidとそのidを再度チェックすると、結果は空に戻ります。これは、新しく追加されたエンティティを登録するファイナライズステップが欠落しているかのようです。後で別のスレッドからセットを照会すると、その指定されたIDを持つエンティティが返されます。問題が何であるか誰にでも見えますか?
おかげで、
迅速な対応をお寄せいただきありがとうございました。 – ambog36